其实用法早就总结了,但是因为自身事务原因,一直没有比较他们间的效率,甚至各种互斥量,条件变量之间的效率,更多是集中看了下他们各自的api和特点,所以估计以后还需要补充或者是另开一篇来讲= =。
序
QThread的线程用法上与std::thread相比有较大的区别,4.4版本之前是继承的方式来使用线程(个人猜测可能是因为那会儿c++11还没出来,std::function和std::bind没有,所以继承是实现消息回调比较方便的方式,当然仅仅是猜测,有兴趣可以查证),但4.4之后开始,官方建议不要再用继承的方式来使用线程,而是通过信号槽的方式来取代。
测试环境:Qt5.7,vs2015。
一、QThread:
如下图所示:
看不清楚图可以直接在官网看:传送门
1、继承自QObject(截图没截上)
2、启动线程:start()函数,启动后调用run()函数,run()执行完之后退出线程。
3、wait:有点类似std::thread 的join,但是需要指定时间,并且不是线程run函数结束后自动返回,如果不指定,默认会一直等待。所以我一般在用的过程中,需要退出的时候(或者调用quit),再wait。
二、两种用法:
既然QThread有两种用法,那么就简单介绍下吧:
图里已经说得很清楚了,那我就不在多说:
头文件:
class QtThreadFuncByThread : public QThread
{
public:
void SetLoop(int loop);
int GetSum();
protected:
virtual void run();
private:
int _Loop =