#include <QThread>
#include <QMutex>
#include <QWaitCondition>
class ITask : public QThread
{
Q_OBJECT
public:
enum TaskStatus {Idel,Running,Paused,Finished}
//.... 构造构析构
//.... IsRunning() ..Is....
virtual void Start(){
if(IsRunning())
return;
m_state = Running;
m_bQuit = false;
start();
}
virtual void Stop(){
if(IsPaused())
Resume();
m_bQuit = true;
}
void Pause(){
if(IsRunning(){
m_sync.lock();
m_state = Paused;
m_sync.unlock();
}
}
bool Resume(){
if(IsRunning())
return true;
if(IsPaused(){
m_sync.lock();
m_state = Running;
m_sync.unlock();
m_cond.wakeOne();
return true;
}
return false;
}
signals:
void sig_threadStatusChanged(int sts);
protected:
virtual void run() override{
while(!m_bQuit && !isInterruptionRequested())
{
waitHandle();
process();
}
m_bQuit = true;
m_state = Finished;
}
virtual void process(){}
void waitHandle(){
m_sync.lock();
if(m_needPause){
m_state = Paused;
m_cond.wait(&m_sync);
}
}
private:
bool m_bQuit{false};
bool m_needPause{false};
TaskStatus m_sts {Idel};
QMutex m_sync;
QWaitCondition m_cond;
QT线程的“暂停”和“恢复”
于 2024-05-20 17:28:06 首次发布