gpt4 book ai didi

c++ - QNetworkReply::finished() 信号是顺序调用还是同时调用?

转载 作者:行者123 更新时间:2023-11-28 04:01:50 28 4
gpt4 key购买 nike

是一种HTTP请求发送方式。当目标网站响应时,将调用 httpFinished()。

void HTTPClientBase:: HttpRequestGet()
{
QNetworkRequest network_request;

network_request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
network_request.setUrl(URL);

reply = network_manager.get(network_request);
connect(reply, SIGNAL(finished()), this, SLOT(httpFinished()));
}

void HTTPClientBase::httpFinished()
{
// process the reply;
}

我可以在循环中调用 HttpRequestGet()。

static HTTPClientBase myClient;
for(...)
{
myClient.setUrl(...);
myClient.HttpRequestGet();
}

由于请求和响应是异步的,所以循环可以在瞬间完成。数百毫秒后,httpFinished()会被依次调用。

我想知道 httpFinished() 将按顺序或同时调用。换句话说,如果我需要关注同步编程问题,例如,将响应数据写入单个文件。

最佳答案

以下语句表示httpFinished方法不会同时执行多次:

  • 当没有执行任何同步任务时调用插槽。
  • HTTPClientBase 是一个存在于线程中的 QObject,因此执行它的任何方法都意味着您无法执行其他任务。
  • 你做的任务不是并发,只是异步。
  • 从设计的角度来看,Qt 的异步性是有效的,但实际上它是同步执行任务的。
  • 在一个线程中,一次只能执行一个任务,httpFinished 在 HTTPClientBase 所在的线程中执行。

关于c++ - QNetworkReply::finished() 信号是顺序调用还是同时调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59402597/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com