标签:idg 发送 thread 多任务 timer ted 间接 lpm protect
1、qt4.7以前版本处理方式,多线程的使用
1、自定义一个类,继承于QThread,
class MyThread : public QThread { public: void run(); // 多任务执行函数 signals: void isDone(); // 处理完成后需要发送信号需要知道,线程处理完成任务 } void run() // 函数实现 { // 处理复杂任务 // 发送信号 任务处理完成 emit isDone(); }
2、使用的地方需要创建一个类对象
MyThread thread; // 在需要多任务的地方启动线程 // 不可以直接掉用run() // start() 间接调用run() thread.start(); // 启动线程
3、线程使用
1、创建一个类继承QThread
#include <QThread> class myThread : public QThread { protected: void run(); // 重写虚函数 线程的入口函数 signals: void isDone(); // 发信号 说明线程结束了 };
2、实现run()函数
void myThread::run() { qDebug() << ";正在睡觉"; sleep(5); // 任务处理代码 emit isDone(); // 发送信号 说明该线程结束了 }
3、线程启动,转去执行run()
void Widget::on_buttonStart_clicked() { if(myTimer->isActive() == false) { myTimer->start(100); } // 需要多线程的地方 启动线程 thread->start(); // 启动线程 }
4、等待run()发出线程结束信号,并处理信号
thread = new myThread(this); // 处理线程结束信号标志 connect(thread,&myThread::isDone,this,&Widget::dealPmythread);
5、线程结束处理
void Widget::dealPmythread() { qDebug() << "deal over"; myTimer->stop(); // 线程结束了 进一步处理 }
6、释放线程资源
// 窗口右上角X 关闭时,发出信号处理, 释放线程资源 connect(this,&Widget::destroyed,this,&Widget::closeThread);
7、释放线程 函数实现
void Widget::closeThread() { thread->quit(); // 关闭线程 thread->wait(); // 等待线程处理完资源 }
标签:idg 发送 thread 多任务 timer ted 间接 lpm protect
原文地址:https://www.cnblogs.com/lbx-cnblogs/p/13471440.html