最后重点看一下如何减少响应的时间,对于数据密集型操作,推荐使用ThreadPool来管理,减少线程上下文切换的时间;而对于IO密集型操作,则自己管理一个thread来实现,而这也是我认为thread最应该使用的情景,即让CPU和外设都处于满负荷运转状态,减少总的操作时间。
对于并行操作响应时间的减少,在QT中引入了Qt Concurrent的概念,采用Map/Reduce的方式,具体可以参考QT中的Concurrent Programming节。
最后再解答下如何在QT中将异步操作改成同步操作的方法,这个就属于QT special的内容,一般的读者可以跳过。
具体的代码如下所示:
1: QNetworkAccessManager manager;
2: QEventLoop q;
3: QTimer tT;
4:
5: tT.setSingleShot(true);
6: connect(&tT, SIGNAL(timeout()), &q, SLOT(quit()));
7: connect(&manager, SIGNAL(finished(QNetworkReply*)),
8: &q, SLOT(quit()));
9: QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("http://www.qtcentre.org")));
10:
11: tT.start(5000); // 5s timeout
12: q.exec();
13:
14: if(tT.isActive()){
15: // download complete
16: tT.stop();
17: } else {
18: // timeout
19: }
其中主要利用了QEventLoop类,它将创建一个本地的Event loop,然后block,直到接受到finished信号,或者timeout超时信号后才退出,而事件循环则不会被block。
总结
本文分析了影响GUI响应速度的原因,通过类比操作系统对任务的优先级分派方式,探讨了对多种事件类型,提高其响应速度的方法,其中有些方法在其它平台也是通用的。
编辑特别推荐:
C++简单内存泄漏检查机制实现
C++类型转换:转换操作符
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。