QThreadPool 取消活动线程一例

QThreadPool虽然方便,但默认不支持取消正在执行的任务。本文介绍一种个人解决方案:通过信号与槽机制,实现按钮触发任务执行及停止。测试表明,该方法能有效停止任务执行,即使在多任务并发情况下也能正常工作。
摘要由CSDN通过智能技术生成

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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值