在 QT5 中,我需要创建至少 20 个 QThread

In QT5 I need to create at least 20 QThread

本文关键字:QThread 创建 QT5      更新时间:2023-10-16

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设置线程池使用的最大线程数。

就是这样,非常简单,我们确实会记录下来。
因此,您实际上无法保证您的线程一次将一起运行。