Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
Http QNetworkAccessManager处理异步线程_Http_Qt_Qt4 - Fatal编程技术网

Http QNetworkAccessManager处理异步线程

Http QNetworkAccessManager处理异步线程,http,qt,qt4,Http,Qt,Qt4,我是新来的。我已经创建了对象类QNetworkAccessManager主窗口作为父窗口。也注册到信号完成。它工作得很好。 但我想知道它将在哪个线程中运行。它会阻塞主线程吗。如果我需要执行get操作序列,我应该如何编写代码。 请给我一些示例来正确理解这个概念。它肯定不会在主线程中运行,对get()的调用是异步的 例如,这将持续触发get请求: while (condition) { QNetworkRequest request; request.setUrl(QUrl(m_Se

我是新来的。我已经创建了对象类QNetworkAccessManager主窗口作为父窗口。也注册到信号完成。它工作得很好。 但我想知道它将在哪个线程中运行。它会阻塞主线程吗。如果我需要执行get操作序列,我应该如何编写代码。
请给我一些示例来正确理解这个概念。

它肯定不会在主线程中运行,对get()的调用是异步的

例如,这将持续触发get请求:

while (condition) {
    QNetworkRequest request;
    request.setUrl(QUrl(m_ServerURL);
    m_httpGetUpdatedFile->get(request);
}

然后就有了处理QNetworkReply的完成信号的插槽。基本上,每个get请求都应该调用该插槽(即使失败)。如果需要跟踪所有get请求何时完成,则需要跟踪发布的数量,然后有自己的完成标志或信号。

它肯定不会在主线程中运行,对get()的调用是异步的

例如,这将持续触发get请求:

while (condition) {
    QNetworkRequest request;
    request.setUrl(QUrl(m_ServerURL);
    m_httpGetUpdatedFile->get(request);
}

然后就有了处理QNetworkReply的完成信号的插槽。基本上,每个get请求都应该调用该插槽(即使失败)。如果需要跟踪所有get请求何时完成,则需要跟踪发布的数量,然后使用自己的完成标志或信号。

QNAM确实在后台使用线程,但这对于应用程序代码来说是完全不可见的。您看到的所有内容都将在主线程中运行

QNAM以通常的Qt方式工作,当事情发生时,它将发出信号,您将这些信号连接到自己代码中的插槽,这些插槽尽可能多地执行操作。例如,如果插槽没有足够的数据,则插槽不能阻塞以等待新数据,而必须返回。然后,当/如果有更多数据时,它们将再次被调用(或者,例如,如果连接被终止,您将得到另一个信号)

某些链接,如果您尚未阅读:


QNAM确实在后台使用线程,但这对于您的应用程序代码来说是完全不可见的。您看到的所有内容都将在主线程中运行

QNAM以通常的Qt方式工作,当事情发生时,它将发出信号,您将这些信号连接到自己代码中的插槽,这些插槽尽可能多地执行操作。例如,如果插槽没有足够的数据,则插槽不能阻塞以等待新数据,而必须返回。然后,当/如果有更多数据时,它们将再次被调用(或者,例如,如果连接被终止,您将得到另一个信号)

某些链接,如果您尚未阅读:


谢谢。精加工槽是否将在主线程中运行?如果它在主线程中运行,它将阻塞主线程。为此,我使用以下样本。---QNetworkAccessManager;QEventLoop q;QTimer-tT;tT.setSingleShot(真);连接(&tT,信号(超时()),&q,插槽(退出());连接(&管理器,信号(已完成(QNetworkReply*)),&q,插槽(退出());QNetworkReply*reply=manager.get(QNetworkRequest(qrl(“URL”)));tT.启动(5k);q、 exec();----这个方法是否正确。我计划在辅助线程中运行上面的代码。如果我在第二个线程中运行它,它将给出问题。谢谢。精加工槽是否将在主线程中运行?如果它在主线程中运行,它将阻塞主线程。为此,我使用以下样本。---QNetworkAccessManager;QEventLoop q;QTimer-tT;tT.setSingleShot(真);连接(&tT,信号(超时()),&q,插槽(退出());连接(&管理器,信号(已完成(QNetworkReply*)),&q,插槽(退出());QNetworkReply*reply=manager.get(QNetworkRequest(qrl(“URL”)));tT.启动(5k);q、 exec();----这个方法是否正确。我计划在辅助线程中运行上面的代码。若我在第二个线程中运行它,它将给出问题。