Qt多线程的几种实现方法
在Qt中经常会遇到耗时的操作,需要同时执行,但在这种情况下使用多线程。 Qt多线程有多种实现方式,这里介绍三种方式。
类实现形式在类中实现多线程是最传统的实现形式,思想是编写继承QThread的类,并在run ()中打开线程。
代码示例:
. h文件
# includeqthreadclassxthread : publicqthread { q _ object public : explicitxthread (q object * parent=nullptr ); void run (; //任务处理线程~xthread () }; cpp文件
x thread :3360 x thread (q object * parent voidxthread :3360 run ) ) /等待运行程序)可以在最后需要调用线程的位置打开
main.cpp
# includexthread.hx thread * ht=null ptr; xt=new xthread; xt - start (; //线程销毁,释放内存delete xt; xt=nullptr; 移动到线程移动到线程是Qt5的新功能,也是官方推荐的方法。 推荐与计时器相结合的实现方法。 写法非常简洁高效。
. cpp文件
x_thread=new QThread; x_timer=new QTimer; func ) )中实现函数主体connect(x_timer,signal ) timeout )、this,slot )、Qt:DirectConnection )//计时器的自动销毁连接(x _ thread,signal(finished ),x_timer,slot ) deletelater ) ); x_timer-start(500; x _ timer -移动到thread (x _ thread; x_thread-start (; h文件
# includeqtimer # includeqthreadqtimer * x _ timer=nullptr; QThread *x_thread=nullptr; ~destructor () if ) x_thread ) ) { x_thread-quit ); x_thread-wait (; delete x_thread; x_thread=nullptr; 使用QtConcurrent QtConcurrent,严格来说,它应该是异步操作,而不是多线程操作,但实际上它调用线程池进行与多线程非常相似的实现。 那个实现代码非常简单。
# includeqtconcurrent/qtconcurrentqtconcurrent :3360 run ([=] ) { func ); //需要时间的操作直接写在这里; 异步的详细说明是我之前的博客,在这里贴上链接,不做说明:
Qt简单异步操作的实现方法