qt线程池学习之(QRunnable、QThreadPool 等)

QRunnable 是所有 runnable 对象的基类,而 QThreadPool 类用于管理 QThreads 集合。
QRunnable 类是一个接口,用于表示一个任务或要执行的代码,需要重新实现 run() 函数。

1. 例程对比:

有bug程序:

    //设置最大线程数为3的一个线程池
  /*  QThreadPool	 *threadpool;	           // 构建一个本地的线程池
    threadpool->setMaxThreadCount(3);         // 线程池中最大的线程数
        for (int nNum = 0; nNum <3; nNum++)
    {
        CRemoteFile	 *task;    // 循环构建可在线程池中运行的任务
        threadpool->start(task);      //线程池分配一个线程运行该任务
        qDebug()<<"Hello world from thread"<<QThread::currentThread();
        QThread::msleep(1000);
}*/

改后:

    CRemoteFile runObj;

    QThreadPool::globalInstance()->start(&runObj);
2. QThreadpool支持多次执行相同的QRunnable,通过调用QThreadPool:tryStart(this)从run()函数内。
QThread 每次新建的一个线程都要继承QThread,来实现新类,比较麻烦;而QRunnable可直接调用对象的start()函数启动线程,并且需要借助QThreadPool
3.Debug Assertion Failed
可能因为使用了野指针,比如某个指针指向一个局部变量,而在该变量作用域之外使用该指针引用了该对象。
解决办法:
在构造函数中加入:
	this->setAutoDelete(false);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿着帆布鞋也能走猫步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值