1. QThread使用
基本使用請見:http://techieliang.com/2017/12/592/安全
在上文中提到了一個簡單範例:app
- #include <QCoreApplication>
- #include <QThread>
- #include <QDebug>
- class MyThread : public QThread {
- protected:
- void run() {
- while(1) {
- qDebug()<<"thread start:"<<QThread::currentThreadId();
- msleep(500);
- }
- }
- };
- int main(int argc, char *argv[]) {
- QCoreApplication a(argc, argv);
- qDebug()<<"Main:"<<QThread::currentThreadId();
- MyThread m;
- m.start();
- QThread::sleep(5);
- m.terminate();
- m.wait();
- return 0;
- }
此範例使用terminate強制關閉線程,此行爲是很危險的,下面提供一種安全的關閉方式spa
- #include <QCoreApplication>
- #include <QThread>
- #include <QDebug>
- class MyThread : public QThread {
- public:
- void stop() { //用於結束線程
- is_runnable =false;
- }
- protected:
- void run() {
- while(is_runnable) {
- qDebug()<<"thread start:"<<QThread::currentThreadId();
- msleep(500);
- }
- is_runnable = true;
- }
- private:
- bool is_runnable = true; //是否能夠運行
- };
- int main(int argc, char *argv[]) {
- QCoreApplication a(argc, argv);
- qDebug()<<"Main:"<<QThread::currentThreadId();
- MyThread m;
- m.start();
- QThread::sleep(5);
- m.stop();
- m.wait();
- return 0;
- }
經過對while循環增長bool類型做爲判斷實現安全的結束線程,當is_runnable=false時,程序會完成這次循環後結束,因此要wait等待,不可直接關閉程序。線程