QT创建和关闭线程

创建多线程:

a.新建一个类MyThread,基类为QThread。
b.重写类MyThread的虚函数void run();,即新建一个函数protected void run(),然后对其进行定义。
c.在需要用到多线程的地方,实例MyThread,然后调用函数MyThread::start()后,则开启一条线程,自动运行函数run()。

关闭多线程:

run()函数执行结束是优雅终止线程的唯一方式,是线程的自然死亡,run成员函数被执行完了run成员函数被正常的返回了,这种叫做正常的死亡,所以在线程类中增加一个标志变量volatile bool m_toStop,通过m_toStop的值判断是否需要从run()函数返回。run函数返回,为优雅的结束线程 。volatile关键字必须去修饰这个标志变量,不需要编译去优化,而是我们每次都会去内存中去取这个值,值是易变的,所以加volatile。
threada.h头文件,加入自旋锁保护a_toStop布尔变量。

#ifndef THREADA_H
#define THREADA_H

#include 
#include 
#include 

class ThreadA : public QThread
{
public:
    ThreadA();
    ~ThreadA();

    void run();
    void stop(void);
    volatile bool a_toStop;
    QMutex a_stopMutex;
};

#endif // THREADA_H

threada.cpp源文件

#include "threada.h"

ThreadA::ThreadA()
{
    a_toStop = false;
}

ThreadA::~ThreadA()
{

}

void ThreadA::run()
{
    while(!a_toStop)
    {
        qDebug("thread A run");
        sleep(2);
    }
}

void ThreadA::stop(void)
{
    QMutexLocker lockera(&a_stopMutex);
    a_toStop = true;
}

你可能感兴趣的:(QT)