QThreadPool maxThreadCount 在 Application 和 DLL 中不同

QThreadPool maxThreadCount different in Application and DLL

本文关键字:DLL maxThreadCount Application QThreadPool      更新时间:2023-10-16

在应用程序中使用 QThreadPool::globalInstance(( 时,我可以将最大线程数设置为一个数字(例如本例中的 50(

QThreadPool::globalInstance()->setMaxThreadCount(50);

稍后我们可以在同一应用程序中查询,并将返回 50。但是,如果从同一应用程序调用的 DLL 中查询 QThreadPool::maxThreadCount((,则返回最大线程计数仅为 12。然后,我可以将库中的 maxThreadCount 增加到我想要的任何数字,与应用程序的 maxThreadCount 数字分开。

那么QThreadPool::globalInstance是否只对独立的应用程序和库是全局的?为什么共享相同进程的Qt DLL和应用程序没有相同的全局QThreadPool?

查看 QThreadPool https://code.woboq.org/qt5/qtbase/src/corelib/global/qglobalstatic.h.html#158 的实现我们可以看到:

QThreadPool *QThreadPool::globalInstance()
    {
        return theInstance();
    }

这里定义 https://code.woboq.org/qt5/qtbase/src/corelib/thread/qthreadpool.cpp.html#50

 Q_GLOBAL_STATIC(QThreadPool, theInstance)

从这里开始,如果由于某种晦涩的原因,您的dll和exec没有与完全相同的Qt核心dll链接,那么您会遇到问题