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);
  1. QThreadpool支持多次执行相同的QRunnable,通过调用QThreadPool:tryStart(this)从run()函数内。
QThread 每次新建的一个线程都要继承QThread,来实现新类,比较麻烦;而QRunnable可直接调用对象的start()函数启动线程,并且需要借助QThreadPool

3.Debug Assertion Failed
可能因为使用了野指针,比如某个指针指向一个局部变量,而在该变量作用域之外使用该指针引用了该对象。
解决办法:
在构造函数中加入:

    this->setAutoDelete(false);

猜你喜欢

转载自blog.csdn.net/xu1129005165/article/details/82220692