如何保持GUI的响应流畅(QT平台)

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  最后重点看一下如何减少响应的时间,对于数据密集型操作,推荐使用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++类型转换:转换操作符

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答