[转]moveToThread

来源:互联网 发布:手机淘宝如何上传视频 编辑:程序博客网 时间:2024/05/29 11:14

QThread多线程编程经典案例分析(三种方法,解释了为什么使用moveToThread的根本原因,即为了避免调用QThread::exec() )


方法(3): 
在Qt4.3(包括)之前,run 是虚函数,必须子类化QThread来实现run函数。而从Qt4.4开始,qthreads-no-longer-abstract ,run 默认调用 QThread::exec() 。这样一来不需要子类化 QThread 了,只需要子类化一个 QObject 就够了,这正是被 Bradley T. Hughes推荐的方法。

方法如下

QThread thread; Object obj; Dummy dummy; obj.moveToThread(&thread); QObject::connect(&dummy, SIGNAL(sig()), &obj, SLOT(slot())); thread.start();



结果:恩,slot确实不在主线程中运行(这么简单不值得欢呼么?)

main thread: 0x1a5c from thread slot: 0x186c

moveToThread的最简单用法(依葫芦画瓢即可)



在编译程序的时候遇到此误,在google上查,很多地方都说是因为虚基类里面的虚拟析构函数没有提供实现导致的。但是我的已经提供了实现,也不行。最后发现是其他没有提供实现的虚函数造成的。所以,在一个虚基类里,如果不提供函数的缺省实现,一定要定义成纯虚函数,否则就会造成此问题。





原创粉丝点击