QThreadPool 用起来倒是很方便,但是就是没有提供取消正在执行的线程任务的方法。
现提供一个个人的解决办法:
#ifndef CWORK_H
#define CWORK_H
#include <QObject>
#include <QRunnable>
class CWork : public QObject,public QRunnable
{
Q_OBJECT
public:
explicit CWork(int nCount,QObject *parent = 0);
void run();
signals:
public slots:
void setCancelWork();
private:
int m_nCount;
bool m_bIsStop;
};
#endif // CWORK_H
#include "cwork.h"
#include <QDebug>
#include <QThread>
CWork::CWork(int nCount, QObject *parent) : QObject(parent),m_bIsStop(false)
{
m_nCount=nCount;
}
void CWork::run()
{
for(int i=0;i<m_nCount;i++)
{
if(m_bIsStop)
{
qDebug()<<"Stop thread Work. thread ID:"<<QThread::currentThreadId();
break;
}
qDebug()<<QThread::currentThreadId()<<" "<<i;
QThread::slee