2017-11-15 6 views
1

나는 (이 예를 들어 말하자면 50) 숫자로QThreadPool maxThreadCount 및 DLL

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

을 스레드의 최대 수를 설정할 수있는 이상 우리가 할 수있는 동일한 응용 프로그램 내에서 쿼리가 반환되고 50 개가 반환됩니다. 그러나 QThreadPool :: maxThreadCount() 같은 응용 프로그램에서 호출 된 DLL 내에서 쿼리 할 경우 최대 스레드 수가 12 경우에만 반환합니다. 그런 다음 라이브러리의 maxThreadCount 늘릴 수있는 원하는 모든 수를 늘릴 수 있습니다. 응용 프로그램 maxThreadCount 번호에서.

그래서 QThreadPool :: globalInstance는 독립적 인 응용 프로그램 및 라이브러리에만 전역 적으로 존재합니까? Qt DLL과 같은 프로세스를 공유하는 응용 프로그램이 왜 QThreadPool과 같은 글로벌 QT DLL을 갖고 있지 않습니까?

+0

이는 스레드 풀 I의 두 개의 개별 인스턴스를 의미합니다 추측. 스레드 수가 정적 변수이므로 EXE와 DLL 모두에 할당됩니다. 그렇다면 프로젝트가 처음부터 어떻게 연결되어 있었습니까? 앱에 하나의 스레드 풀 객체가 있는지 확인하는 방법이 있습니까? – AlexanderVX

답변

0

QThreadPool https://code.woboq.org/qt5/qtbase/src/corelib/global/qglobalstatic.h.html#158 의 구현을 보면 우리는 그것을 볼 수 있습니다 : 여기에서 여기 https://code.woboq.org/qt5/qtbase/src/corelib/thread/qthreadpool.cpp.html#50

Q_GLOBAL_STATIC(QThreadPool, theInstance) 

정의

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

, 일부 모호한 이유로 DLL과 간부 인 경우 정확히 같은 Qt core dll과 연결되어 있지 않으면 문제가 발생합니다.