Qt(c++)中的简单网络超时

Simple network timeout in Qt(c++)

本文关键字:简单 简单网 网络 超时 c++ Qt      更新时间:2023-10-16

我正在Qt中编写一个简单的网络文件传输应用程序,我正在努力实现超时。

基本上,我想要的是以下内容,

while(!AcknowledgeReceived)
{
 if(timeout)
  {
     break;
  }
}

目前,超时是由Qtimer更改的,但一旦循环开始执行,它就永远不会离开。(插槽QTimer发射到的不会被执行。)我认为这与线程有关,但要正确实现它,我在这方面还很新。

所以我要问你的问题是,我如何确保方法翻转超时被执行,或者我如何用另一个方法获得相同的结果?

这样循环时,Qt主事件循环将不会运行,因为它在对函数的调用中。

你要么需要重新设计你的应用程序,只使用插槽和信号,这样你就不需要循环了。或者你必须自己处理Qt事件。

例如

QNetworkAccessManager netman;
QNetworkRequest request{url};
QNetworkReply* reply = netman.post(request, data);
while (!reply->isFinished())
{
    QThread::msleep(1);
    qApp->processEvents();
}