C++ 应用程序和DLL中的QThreadPool maxThreadCount不同

C++ 应用程序和DLL中的QThreadPool maxThreadCount不同,c++,multithreading,qt,dll,threadpool,C++,Multithreading,Qt,Dll,Threadpool,在应用程序中使用QThreadPool::globalInstance()时,我可以将最大线程数设置为一个数字(本例中为50) 稍后我们可以在同一个应用程序中查询,并返回50。但是,如果从同一应用程序调用的DLL中查询QThreadPool::maxThreadCount(),它将返回最大线程数仅为12。然后,我可以将库中的maxThreadCount增加到我想要的任何数字,与应用程序maxThreadCount数字分开 那么,QThreadPool::globalInstance对于独立的应用

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

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


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

查看QThreadPool的实现 我们可以看到:

QThreadPool *QThreadPool::globalInstance()
    {
        return theInstance();
    }
这里定义了什么


从这里开始,如果由于某种模糊的原因,您的dll和exec没有与完全相同的Qt core dll链接,您将遇到问题

,我想这意味着线程池的两个独立实例。这可能是因为为EXE和DLL分配了线程计数的静态变量。那么问题是这个项目最初是如何联系在一起的?有没有办法确保应用程序中有一个线程池对象?
QThreadPool *QThreadPool::globalInstance()
    {
        return theInstance();
    }
 Q_GLOBAL_STATIC(QThreadPool, theInstance)