大家好,欢迎来到IT知识分享网。
QThread类提供与系统无关的线程
QThread代表在程序中一个单独的线程控制,从run()开始执行
1、启动线程:start()
2、结束线程:exit()、quit()
3、查询线程状态:isFinished()、isRunning()
4、使线程等待:wait()
5、暂停线程
(1)暂停秒单位的线程:sleep()
(2)暂停毫秒单位的线程:msleep()
(3)暂停微妙单位的线程:usleep()
6、返回标识当前正在执行的线程
(1)currentThreadID():返回该线程平台特定的ID
(2)currentThread():返回一个线程指针
7、设置线程名称:在启动线程前调用SetObjectName(),不调用则线程名称为线程对象的运行时类名(QThread子类的类名)
8、QThread类的使用方式
(1)QObject::moveToThread()
(2)继承QThread类(我感觉每创建一个线程其实就是新建一个继承自QThread类,mainwindow算主线程,需要多少个子线程就自定义几个继承自QThread的类的对象)
步骤:
<1>创建新的c++类(如MyThread),Base class选择“<custom>”,“<custom>”下面输入QThread –> 要在MyThread.h文件中写#include <QThread>,否则会报error: expected class-name before ‘{‘ token(该error的意思是找不到相关类)
<2>在MyThread.h中声明好run()和用于终止线程的stop()函数,如下图所示:
<3>在MyThread.cpp里重载run()、stop()函数。其中run()里面写的是该线程需要执行的操作,stop()里写的是如何让该线程终止的操作,如下图所示:
<4>在主线程的.h文件中需要#include你自定义的线程头文件,如图所示:
还要在主线程.h文件中(在这里是dialog.h)创建好各子线程的对象,后期通过各子线程的对象调用start()函数来启动对应的线程,如图所示:
<5>在你的主线程中,哪里需要开启线程,就在哪里写thread.start();哪里需要终止线程,就在哪里写thread.stop()。我是在dialog.ui的两个button对应的槽函数中开启和终止线程,所以在dialog.cpp中开启、终止线程如下图所示:
你可以在主线程的构造函数里启动子线程(就是用start()),也可以发射一个信号后在对应的槽函数里启动子线程,反正在哪里想启动线程就用“子线程对象.start()”即可。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/158397.html