在 QT5 中,我需要创建至少20个线程
应该是什么方法?
目前我使用QtConcurrent::run
创建线程,但一次只运行其中四个。
答案 0 :(得分:3)
幸运的是QtConcurrent
和线程背后没有任何魔力,所以一次逻辑运行通常不同于实际上一次运行并且你不能指望如果只是因为您的计算机上有N
个核心,或者您依赖于引擎盖下的线程池,请参阅N
每个M
运行的QtConcurrent
个。{/ p>
特别是,如果您查看QFuture<T> QtConcurrent::run(Function function, ...)
的{{3}},就会发现:
QtConcurrent根据可用的处理器核心数自动调整使用的线程数。
关于您找到的documentation成员方法:
QtConcurrent::run(QThreadPool::globalInstance(), function, ...);
它相当于:
QThreadPool
事实上,它声明:
在单独的线程中运行功能。该线程取自全局QThreadPool。请注意, function 可能无法立即运行;只有在线程可用时才会运行 function 。
您可以查看idealThreadCount
的{{3}}了解更多详情
特别值得注意的是成员方法setMaxThreadCount
,其中run
表示:
返回可在系统上运行的理想线程数。这样就可以查询系统中的实际和逻辑处理器内核的数量。
请注意,您可以通过QThreadPool
的成员方法ng-if
永久documentation。
这就是全部,非常简单,我们确实会记录下来 因此,您实际上无法保证您的线程一次可以一起运行。