主页 > 开源代码  > 

【QT线程】子线程阻塞主线程的一次网络api请求案例

【QT线程】子线程阻塞主线程的一次网络api请求案例
阻塞源码赏析

这是最近一次项目遇到的问题,原因是我觉得子线程里俩次请求间隔太短了,会引起服务器屏蔽我的api因此,我故作聪明加多了一个延时函数,欢迎各位鉴赏代码。

// 并行发起双请求 QNetworkRequest liveRequest(liveUrl); liveRequest.setSslConfiguration(sslConfig); QNetworkReply *liveReply = m_manager->get(liveRequest); QThread::msleep(10000); QNetworkRequest forecastRequest(forecastUrl); forecastRequest.setSslConfiguration(sslConfig); QNetworkReply *forecastReply = m_manager->get(forecastRequest); // 处理实时响应 connect(liveReply, &QNetworkReply::finished, [this, liveReply]() { if (liveReply->error() == QNetworkReply::NoError) { QJsonDocument doc = QJsonDocument::fromJson(liveReply->readAll()); parseLiveData(doc.object()); } liveReply->deleteLater(); }); // 处理预报响应 connect(forecastReply, &QNetworkReply::finished, [this, forecastReply]() { if (forecastReply->error() == QNetworkReply::NoError) { QJsonDocument doc = QJsonDocument::fromJson(forecastReply->readAll()); parseForecastData(doc.object()); } forecastReply->deleteLater(); });

下面这个版本才是不会引起主线程阻塞的版本,各位可以分析是什么原因导致了主线程阻塞。


// 串行发起双请求 QNetworkRequest liveRequest(liveUrl); liveRequest.setSslConfiguration(sslConfig); QNetworkReply *liveReply = m_manager->get(liveRequest); // 处理实时响应 connect(liveReply, &QNetworkReply::finished, [this, liveReply]() { if (liveReply->error() == QNetworkReply::NoError) { QJsonDocument doc = QJsonDocument::fromJson(liveReply->readAll()); parseLiveData(doc.object()); QThread::msleep(1000); } liveReply->deleteLater(); }); QNetworkRequest forecastRequest(forecastUrl); forecastRequest.setSslConfiguration(sslConfig); QNetworkReply *forecastReply = m_manager->get(forecastRequest); // 处理预报响应 connect(forecastReply, &QNetworkReply::finished, [this, forecastReply]() { if (forecastReply->error() == QNetworkReply::NoError) { QJsonDocument doc = QJsonDocument::fromJson(forecastReply->readAll()); parseForecastData(doc.object()); } forecastReply->deleteLater(); });
标签:

【QT线程】子线程阻塞主线程的一次网络api请求案例由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【QT线程】子线程阻塞主线程的一次网络api请求案例