Qt多线程的基本使用方法
线程的常用成员函数
退出线程,停止底层的事件循环,函数为
void QThread::exit(int returncode =0);
调用线程退出函数之后,线程不会马上退出因为当前任务有可能还没有完成,等待任务完成,然后退出线程,一般况下会在 exit()后边调用这个函数。
bool QThread::wait(unsigned long time = ULONG MAX);
启动子线程,start函数括号中中设置的是优先级。
[slot] void QThread::start(Priority priority = InheritPriority);
/线程休眠函数
[static] void Qrhread::msleep(unsigned long msecs);//单位毫秒
[static] void QThread::sleep(unsigned long secs);//单位秒
[static] void QThread::usleep(unsigned long usecs);//微秒
线程要处理什么任务,需要写到run()中
[virtual protected] void QThread::run();
使用方式
需要创建一个线程类的子类,让其继承QT中的线程类 QThread
class MyThread:public QThread
{
......
}
重写父类的 run() 方法,在该函数内部编写子线程要处理的具体的业务流程
class MyThread:public QThread
{
......
protected:
void run()
{
........
}
}
在主线程中创建子线程对象,new 一个就可以了
MyThread * subThread = new MyThread;
启动子线程, 调用 start() 方法
subThread->start();
实际运用
创建一个新的类继承自 QThread。
class WorkerThread : public QThread//这里是头文件
{
public:
WorkerThread();
~WorkerThread();
protected:
void run() override;
};
实现 run 方法,在这个方法中编写子线程要执行的任务。
WorkerThread::WorkerThread() {}
WorkerThread::~WorkerThread() {}
void WorkerThread::run()
{
// 子线程执行的任务
qDebug() << "Running in worker thread.";
// 可以进行耗时操作,例如文件读取、复杂计算等
}
在主线程中创建并启动子线程。
include <WorkerThread.h>//头文件中有了就不用在cpp文件引入
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
WorkerThread *thread = new WorkerThread();
thread->start();//线程开始运行
return app.exec();
}
当然实际运用中,会有数据的传输,使用信号与槽进行子线程与主线程的数据交互,这个信号与槽的知识,教程较多,这里就不多赘述。