• 8527阅读
  • 4回复

QThread很JB啊 [复制链接]

上一主题 下一主题
离线santhtony
 

只看楼主 倒序阅读 楼主  发表于: 2010-05-12
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
在Qt里面, 如果要创建一个线程似乎只能用QThread, 我觉得这样不太灵活.
1. 似乎要使用QThread, 只能新建一个类继承自QThread, 然后重写run方法.
但是问题是如果有许多需要多线程的功能,就会产生许多QThread的派生类, 而且这些类都是很相似的,只是run不同.

2. 使用的时候是用的QThread变量.
但是如果这样写:
QThread thread;
thread.start();
问题是thread的生命期马上就结束了, 程序会提示你"QThread: Destroyed while thread is still running", 然后过一会崩溃掉.
如果用new Thread()的话, 释放又需要很多额外的代码.
如果是把这个thread当作成员函数的话(C++ gui programming里14.1章这样做), 无法解决多次启动的问题.比如每隔5s要启动一次这个thread, 但是实际只有一个thread实例.


而windows api里的一个createThread(pFunc, param)的形式开启, 非常简单灵活,也没有生命周期问题.


-------------> ------->       http://www.likeqt.com
离线wangrunmin
只看该作者 1楼 发表于: 2011-07-31
这个东西是很蛋疼的问题,需要高手做个细致的总结
离线sbtree
只看该作者 2楼 发表于: 2011-08-03
QThread是对线程进行的对象封装,你当然要保证在线程运行期间该对象必须存在才行。我通常的做法是使用new来创建对象,当线程结束后再删除。其实这样封装有一好处是,可以把run函数访问的资源都放在该线程对象中,run函数只访问该对象实例中的资源,防止重入问题。
windows 7 + VC++2008 + Qt4.5.2
离线jianxin.jin
只看该作者 3楼 发表于: 2011-08-03
用moveToThread()方法,继承QThread实现run()方法这个相当的不好用
离线XChinux

只看该作者 4楼 发表于: 2011-08-03
QtConcurrent::run(),应该是楼主想要的东西吧。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个