Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用线程处理信号和插槽_C++_Multithreading_Qt - Fatal编程技术网

C++ 使用线程处理信号和插槽

C++ 使用线程处理信号和插槽,c++,multithreading,qt,C++,Multithreading,Qt,我需要能够发出请求GET request,这需要使用信号来处理回复,并以处理后的形式返回回复。我已经按照中所述构建了代码,但是当我运行时,不会收到或处理回复 // Set-up request QNetworkAccessManager* pConnection(new QNetworkAccessManager()); connect(pConnection, SIGNAL(finished(QNetworkReply*)), this, SLOT(p

我需要能够发出请求GET request,这需要使用信号来处理回复,并以处理后的形式返回回复。我已经按照中所述构建了代码,但是当我运行时,不会收到或处理回复

// 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中使用