Qt之執行緒的開始暫停恢復停止(轉)
阿新 • • 發佈:2022-05-11
一.前言
軟體開發中,使用到執行緒就不可避免的要實現執行緒的暫停恢復停止等操作,總不可能說執行緒一旦啟動就直接執行到結束了,中途不能停止啥的。執行緒的開始以及結束都比較簡單,都有對應的介面可以呼叫,執行緒的暫停以及恢復就需要自己手動寫個介面,關鍵在於使用執行緒鎖來實現這個過程。
二.實現過程
1.1先繼承QThread實現自己的執行緒類,宣告執行緒鎖變數,以及暫停恢復停止的介面
1.2核心程式碼(.h)
點選檢視程式碼
/* * 執行緒開始 暫停 恢復 停止 例程 * V1.0 2021-12-27 */ #ifndef THREAD3_H #define THREAD3_H #include <QObject> #include <QThread> #include <QDebug> #include <QTime> #include <QCoreApplication> #include <QMutex> class Thread3 : public QThread { public: Thread3(); ~Thread3() {} public: void close(); void pauseThread(); void resumeThread(); protected: void run(); private: volatile bool stop_; bool pause_; QMutex pauseLock; int i; }; #endif // THREAD3_H
2.cpp核心程式碼
點選檢視程式碼
#include "Thread3.h" Thread3::Thread3() { stop=false; pause=false; i=0; } void Thread3::close() { stop=true; quit(); wait(); } void Thread3::pauseThread() { qDebug()<<"pauseThread"; this->pauseLock.lock(); pause=true; } void Thread3::resumeThread() { qDebug()<<"resumeThread"; this->pauseLock.unlock(); pause=false; } void Thread3::run() { while(i<10) { if(!stop) { // 執行緒鎖在業務開始和和結束的地方 pauseLock.lock(); // 具體的業務邏輯 i++; qDebug()<<i<<"-" <<QTime::currentTime() <<"-" <<"CurrnetThreadID:" <<QThread::currentThreadId(); msleep(1000); // pauseLock.unlock(); } else { break; } } }
三.其他
1.本文只是簡單實現執行緒的開始暫停恢復以及停止功能,但是實際運用過程中,還需要增加諸多的邏輯處理,比如暫停之前判斷執行緒的狀態再執行,恢復之前判斷執行緒的狀態再執行恢復等
2.原始碼下載連結