一:现象
当我使用QtConcurrent::run创建多个线程时,发现有的线程无法启动。
二:测试
用下面测试例程发现,QtConcurrent::run创建多线程,相当于在当前线程池中开线程,而系统默认当前线程池支持的最大线程个数为8,所以当线程大于8时,需要排队进入线程池。
#include <QApplication>
#include <QProcess>
#include <QDebug>
#include <QThread>
#include <QtConcurrent/QtConcurrent>
int num = 0;
void doWork()
{
qDebug()<<num++;
QThread::msleep(10000);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//QThreadPool::globalInstance()->setMaxThreadCount(100);
for(int i = 0; i < 100; i++){
QtConcurrent::run(QThreadPool::globalInstance(),&doWork);
}
qDebug()<< QThreadPool::globalInstance()->maxThreadCount()<<QThreadPool::globalInstance()->activeThreadCount();
return a.exec();
}
三:解决
QThreadPool::globalInstance()->maxThreadCount();获取线程池最大线程个数
QThreadPool::globalInstance()->activeThreadCount();当前活动的线程个数
QThreadPool::globalInstance()->setMaxThreadCount(100);设置最大线程个数
通过设置线程最大个数可以解决这个问题