文章目录
- 前言
 - 一、线程,进程 介绍
 - 二、创建线程
 - 三、终止线程
 - 总结
 
前言
一、线程,进程 介绍
线程:
 是操作系统中独立运行的最小单位。每个线程都有自己的执行路径、程序计数器、堆栈和一组寄存器。线程共享进程的资源,如内存和文件描述符,可以并发执行,从而提高程序的并发性和响应性。
进程:
 是操作系统中运行的一个程序实例。它拥有独立的内存空间和系统资源,如文件句柄、网络连接等。一个进程可以包含多个线程,这些线程共享进程的资源。进程之间相互独立,拥有各自的地址空间和系统资源,并通过进程间通信(IPC)机制进行交互。
 
二、创建线程
在 Qt 中,可以使用 QThread 类来创建线程。
- Qt 中的线程以对象的形式被创建和使用。
 - 每一个线程对应着一个 QThread 对象。
 
- void fun ( )
线程体函数,用于定义线程功能(执行流) - void start ( )
启动函数,将线程入口地址设置为 run 函数。 - void terminate ( )
强制结束线程(不推荐) 
示例代码:
#include <QCoreApplication>
#include <QThread>
#include <QDebug>
class MyThread : public QThread				//创建线程类
{
protected:
	void run()    				  //线程入口,线程体函数
    {
        qDebug() << objectName()<< " : begin";
        for(int i=0; i < 5 ;i++)
        {
            qDebug() << objectName()<< " : "<< i;
            sleep(1);						//休眠 1 秒
        }
		qDebug() << objectName()<< " : end";
    }
int main(int argc, char *argv[])			//主线程入口函数
{
    QCoreApplication a(argc, argv);
	qDebug() << "main : begin";
    MyThread t;							//创建子线程
    t.setObjectName("t1");
    t.start();							//启动线程
	qDebug() << "main : end";
	return a.exec();
}
 
输出结果:
 
注意:
 示例中 主线程 将优先于 子线程 结束。
 所有线程都结束后,进程结束。
三、终止线程
怎末结束线程呢
 在工程开发中,terminate () 是禁止使用的! terminate ()会使操作系统 暴力终止线程,而不会考虑数据的完整性,资源释放等问题!
结束线程 方法:
设置一个标志位当需要终止线程时设置这个 标志位。
 在 Mythread 中提供一个标志位变量,并且提供一个stop()函数,当需要将线程终止时将这个 m_stop 设置为true即可。
#include <QCoreApplication>
#include <QThread>
#include <QDebug>
class MyThread : public QThread
{
protected:
    bool m_to_stop;			//终止标志位
    void run()      //线程入口,线程体函数
    {
        qDebug() << objectName()<< " : begin";
		for(int i=0;(!m_to_stop)&&(i<5);i++)
        {
            qDebug() << objectName()<< " : "<< i;
            sleep(1);									//每打印一次,休眠 1 秒
		}
		qDebug() << objectName()<< " : end";
    }
public:
    MyThread()
    {
        m_to_stop = false;
    }
	 void stop()
    {
        m_to_stop = true;
    }
};
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
	qDebug() << "main : begin";
    MyThread t;
    t.setObjectName("t1");
    t.start();
    for(int i=0;i<5;i++)
    {
        QThread::sleep(1);			//休眠
        if(i == 2)
            t.stop();				//休眠 3 秒后终止线程
    }
    qDebug() << "main : end";
	return a.exec();
}
 
输出结果:
 



















