Qt开源网络库[7]-阻塞功能
- 2019 年 11 月 6 日
- 笔记
有时候使用多个有顺序Http请求时(下一个请求需要上一个请求的内容),这时候阻塞功能非常有用。
接口
- 阻塞当前线程,并进入事件循环。
HttpRequest &block();
实现
- 使用QEventLoop实现。
QEventLoop loop; QObject::connect(m_networkReply, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); /* 阻塞当前线程,如在主线程不会冻结界面。*/
示例
static HttpService http; http.get("https://qtbig.com") .onResponse([](QByteArray result) { /* 接收数据 */ qDebug() << "Result: " << result.left(100); }) .onResponse([](qint64 recv, qint64 total) { /* 接收进度 */ qDebug() << "Total: " << total << "; Received: " << recv; }) .onError([](QString errorStr) { /* 错误处理 */ qDebug() << "Error: " << errorStr; }) .block() /* 阻塞操作 */ .exec();
关于更多
- 源码地址:https://github.com/aeagean/QtNetworkService
- Qt开源网络库[1]-介绍
- Qt开源网络库[2]-接口篇
- Qt开源网络库[3]-原理篇上
- Qt开源网络库[4]-原理篇下
- Qt开源网络库[5]-lambda支持
- Qt开源网络库[6]-超时功能