QEventLoop可能会帮助你。我用一个超时定时器启动一个http连接,全部在一个线程中。然后等待其中一个完成并返回。
void MyThread::run(){
QNetworkAccessManager qnaManager;
bool isPost = false;
QUrl url(myUrl);
QNetworkRequest req(url);
QNetworkReply *reply;
req.setHeader(QNetworkRequest::ContentTypeHeader,
"application/json");
req.setHeader(QNetworkRequest::ContentLengthHeader,
QVariant(postData.size()).toString());
reply = qnaManager.get(req);
QEventLoop eventLoop;
QTimer timer;
timer.setSingleShot(true);
const int timeout = 400;
timer.start(timeout);
connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec();
if (timer.isActive()){
//everything is ok
}else{
//timer elapsed, no replay
return;
}
}
我不知道你的应用程序是如何工作的,但是你可以使用'QMutex'或'QWaitCondition'来暂停这个线程,直到你点击一个按钮或者任何解锁这个互斥体。无论如何,YOu应该使用后台线程来执行您的操作,我猜测。 – xander
为什么不使用用户输入的模式对话框? – vahancho
已经考虑过了,但是为了做到这一点,计算能力很强 – adrianmcmenamin