QThreadPool maxThreadCount在Application和DLL

时间:2017-11-15 20:21:30

标签: c++ multithreading qt dll threadpool

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

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

以后我们可以在同一个应用程序中查询,并返回50。但是,如果从同一个应用程序调用的DLL中查询QThreadPool :: maxThreadCount(),它会返回最大线程数只有12个。然后我可以将库中的maxThreadCount增加到我想要的任何数字,分开从应用程序maxThreadCount编号。

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

1 个答案:

答案 0 :(得分:0)

查看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相关联,你就会遇到问题