C++ 使用线程处理信号和插槽
我需要能够发出请求GET request,这需要使用信号来处理回复,并以处理后的形式返回回复。我已经按照中所述构建了代码,但是当我运行时,不会收到或处理回复C++ 使用线程处理信号和插槽,c++,multithreading,qt,C++,Multithreading,Qt,我需要能够发出请求GET request,这需要使用信号来处理回复,并以处理后的形式返回回复。我已经按照中所述构建了代码,但是当我运行时,不会收到或处理回复 // Set-up request QNetworkAccessManager* pConnection(new QNetworkAccessManager()); connect(pConnection, SIGNAL(finished(QNetworkReply*)), this, SLOT(p
// Set-up request
QNetworkAccessManager* pConnection(new QNetworkAccessManager());
connect(pConnection,
SIGNAL(finished(QNetworkReply*)),
this,
SLOT(process(QNetworkReply*)));
QUrl url;
url.setUrl(HOST);
url.addQueryItem("P1", "Hi");
url.addQueryItem("P2", "Bob");
// Send request
QNetworkRequest request(url);
pConnection->get(request);
// Wait for reply
QThread* pResponce(new QThread(this));
connect(this,
SIGNAL(processingFinished()),
pResponce,
SLOT(quit()));
pConnection->moveToThread(pResponce);
pResponce->start();
pResponce->wait();
pConnection->deleteLater();
pResponce->deleteLater();
return this->processedReply;
很明显我错过了什么,但是什么?它在我不使用线程和删除时工作,因此它不是URL或服务器。如果没有在其他线程中设置事件循环,则只有主/gui线程接收信号 如果没有正在运行的事件循环,事件将不会传递到对象。例如,如果在线程中创建QTimer对象,但从未调用exec,则QTimer将永远不会发出超时信号。稍后调用delete也不起作用。这些限制也适用于主线程 资料来源:
请参阅QThread::exec。这就是为什么在您链接的示例中引入了QThreadEx类,而不是在您的代码snipplet中使用 如果没有在其他线程中设置事件循环,则只有main/gui线程接收信号 如果没有正在运行的事件循环,事件将不会传递到对象。例如,如果在线程中创建QTimer对象,但从未调用exec,则QTimer将永远不会发出超时信号。稍后调用delete也不起作用。这些限制也适用于主线程 资料来源: 请参阅QThread::exec。这就是为什么在您链接的示例中引入了QThreadEx类,而不是在您的代码snipplet中使用