在QT5中,我需要创建至少20个线程。
方法应该是什么?
目前我正在使用QtConcurrent::run
来创建线程,但一次只有四个线程在运行。
幸运的是,QtConcurrent
和线程背后没有任何魔力,因此逻辑上一次运行通常与一次实际运行不同,您不能期望看到它们中的N
一次运行每个N
,如果仅仅是因为您的机器上有 M
个内核,或者您依赖于底层的线程池。
特别是,如果您查看 QtConcurrent
的文档,您会发现:
QtConcurrent 根据可用的处理器内核数量自动调整使用的线程数。
关于您找到的 run
成员方法:
QFuture<T> QtConcurrent::run(Function function, ...)
它相当于:
QtConcurrent::run(QThreadPool::globalInstance(), function, ...);
事实上,它指出它:
在单独的线程中运行函数。该线程取自全局 QThreadPool。请注意,函数可能不会立即运行;函数仅在线程可用时运行。
有关更多详细信息,您可以查看QThreadPool
的文档。
特别是,有趣的是成员方法idealThreadCount
,其文档指出:
返回可在系统上运行的理想线程数。这是通过查询系统中实际和逻辑处理器内核的数量来完成的。
另请注意,您可以通过QThreadPool
的成员方法setMaxThreadCount
设置线程池使用的最大线程数。
就是这样,非常简单,我们确实会记录下来。
因此,您实际上无法保证您的线程一次将一起运行。