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

时间:2016-04-30 08:31:48

标签: c++ qt

我在Qt中编写了一个简单的网络文件传输应用程序,但我很难实现超时。

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

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

目前,Qtimer会更改超时,但一旦循环开始执行,它就永远不会离开。 (Slot QTimer发出并不会被执行。) 我认为这与线程有关,但我可以通过新的方式正确实现它。

所以我的问题是,如何确保执行方法翻转超时,或者如何使用其他方法获得相同的结果?

2 个答案:

答案 0 :(得分:1)

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

您需要重新设计应用程序以仅使用插槽和信号,因此您不需要循环。或者你必须process the Qt event yourself

答案 1 :(得分:0)

例如

QNetworkAccessManager netman;
QNetworkRequest request{url};
QNetworkReply* reply = netman.post(request, data);

while (!reply->isFinished())
{
    QThread::msleep(1);
    qApp->processEvents();
}