我在Qt中编写了一个简单的网络文件传输应用程序,但我很难实现超时。
基本上,我想要的是以下内容,
while(!AcknowledgeReceived)
{
if(timeout)
{
break;
}
}
目前,Qtimer会更改超时,但一旦循环开始执行,它就永远不会离开。 (Slot QTimer发出并不会被执行。) 我认为这与线程有关,但我可以通过新的方式正确实现它。
所以我的问题是,如何确保执行方法翻转超时,或者如何使用其他方法获得相同的结果?
答案 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();
}