码迷,mamicode.com
首页 > 编程语言 > 详细

Qt线程

时间:2019-11-05 22:10:16      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:name   ica   情况   解决方案   另一个   角度   mina   操作系统   变量   

1. QThread

(1)QThread是一个跨平台的多线程解决方案

(2)QThread以简洁易用的方式实现多线程编程

(3)绝大多数情况下需要继承这个QThread类创建属于自己的多线程的类

2.Qthread中的几个重要成员函数:

(1)virtual void run()函数
线程函数,用于定义线程功能(执行流)。
该函数是线程入口地址、线程体函数,用于定义线程功能(线程就是一个执行流、即执行的顺序)
直接调用该函数就会产生一个线程吗?
不会,要想启动一个线程需要调用start()的成员函数,start()函数从操作系统角度真正创建一个线程
(2)void start()
线程的启动函数,将线程的入口地址设置为run函数启动线程,新线程开始执行run函数
用start函数就会产生一个子线程,然后该线程从run函数开始执行。每次执行start()函数就相当于新创建一个线程
一定不要以为调用stop函数线程停止,调用start函数线程重新启动
(3)void terminal()
 强制结束线程函数(不推荐)

(4)int exec()进入事件循环,直至调用exit()。返回线程退出事件循环的返回码。

 1 #include <QtCore/QCoreApplication>
 2 #include <QThread>
 3 #include <QDebug>
 4 
 5 class MyThread : public QThread
 6 {
 7 protected:
 8     void run()
 9     {
10         qDebug() << objectName() << " : " << "run() begin";
11 
12         for(int i=0; i<5; i++)
13         {
14             qDebug() << objectName() << " : " << i;
15 
16             sleep(1);
17         }
18 
19         qDebug() << objectName() << " : " << "run() end";
20     }
21 };
22 
23 int main(int argc, char *argv[])
24 {
25     QCoreApplication a(argc, argv);
26 
27     qDebug() << "main() begin";
28 
29     MyThread t;
30 
31     t.setObjectName("t");
32 
33     t.start();
34 
35     MyThread tt;
36 
37     tt.setObjectName("tt");
38 
39     tt.start();
40 
41     qDebug() << "main() end";
42     
43     return a.exec();
44 }

3.线程对象和线程的生命周期

(1)线程对象的生命期

  ①线程对象指的是由QThread类定义的一个对象,是一个Qt对象。其生命周期与一般的Qt对象具有相同的特点

  ②每个Qt对象都关联唯一一个线程环境,对象有明确的线程属性。当一个对象在某线程中,这就和该线程建立血缘关系,这种关系会一直保持到它死去或者被moveToThread到另一个线程中。

(2)线程的生命期

 
技术图片

 

 

线程何时死亡?
1、正常死亡(完成线程的任务后)
2、非正常(意外的状态)当调用terminal函数时
工程中禁止使用函数terminal,因为terminal有可能资源没有被释放当产生的数据有可能是不能用的数据
如何优雅地中值进程的结束?
思路:run函数执行结束就是安全中止线程的唯一方式
在线程中使用标志性变量
如:volatile bool m_stop;
根据m_stop的值判断是不是需要结束线程循环,进而中止线程
 
 

Qt线程

标签:name   ica   情况   解决方案   另一个   角度   mina   操作系统   变量   

原文地址:https://www.cnblogs.com/zhaobinyouth/p/11801587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!