2017-12-06 13 views

답변

1

일반적으로 이러한 종류의 작업은 기본 스레드 핸들을 추출한 다음 필요한 시스템 특정 작업을 수행함으로써 수행됩니다. 낮은 수준의 스레드 관리를 위해 허용되는 교차 플랫폼 API가 없기 때문입니다.

Qt::HANDLE QThread::currentThreadId() Q_DECL_NOTHROW 
{ 
    // requires a C cast here otherwise we run into trouble on AIX 
    return to_HANDLE(pthread_self()); 
} 

그리고 qthread_win.cpp에서 구현이 예상되는 방법으로 다릅니다 : 우리는 qthread_unix.cpp의 소스를 검사하는 경우

사실, 우리는 다음을 참조합니다 그래서

Qt::HANDLE QThread::currentThreadId() Q_DECL_NOTHROW 
{ 
    return reinterpret_cast<Qt::HANDLE>(quintptr(GetCurrentThreadId())); 
} 

, 그것은이다 실행될 것으로 예상되는 각 플랫폼에 적절한 저수준 액션을 수행하는 애플리케이션 코드의 책임.

1

Qt는 프로세서 선호도를 설정하기위한 공개 API를 제공하지 않습니다. 풀 내의 QThread에 액세스하기위한 API를 제공하지 않는 QThreadPool에 대해서는이 작업을 수행 할 방법이 없습니다.

명시 적으로 생성 된 QThread 개체의 경우 QThread::getCurrentThreadId() 함수를 사용하여 스레드에 원시 "핸들"을 반환 한 다음이를 시스템의 스레드 관리 라이브러리 호출에 전달할 수 있습니다. 그러나 나는 이것을 강력하게 추천 할 것이다. 워드 프로세서 명시 적으로 상태 :

경고 :이 함수에 의해 반환 핸들 내부 목적으로 사용하고 응용 프로그램 코드에서 사용할 수 없습니다. 특정 플랫폼에 구축하는 경우

, 당신은 당신의 OS의 라이브러리 (예를 들어, pthreads)에 호출을 혼합 할 수 있습니다,하지만 휴대용하지 않습니다 그것이 작동하는지 나는 모른다.

아마도 가장 좋은 방법은 전체 응용 프로그램의 CPU 선호도를 명령 줄에서 관리하는 것입니다. Linux를 사용하는 경우 taskset을 사용하십시오. Windows의 경우 this SO answer을 살펴보십시오. 불행하게도, 애플은 사용자가 최소한 스레드와의 친 화성을 설정하지 못하도록 막연하게 결정했다.

+0

저는 Mac OS/X에 관해서는 전혀 몰라요.하지만 저는 BSD ([그래서 : Mac OS X와 ​​BSD가 얼마나 밀접하게 관련되어 있습니까?] (https://stackoverflow.com/q/3446231/)를 기반으로합니다. 7478597) 참조). 호기심에서 내가봤을 때 이것을 발견했습니다 : [SU : OS X에서 프로세서 친 화성을 설정하는 방법] (https://superuser.com/a/770772). – Scheff

+0

@Scheff 예, 스레드 선호도 API를 알고 있습니다. 그러나 Mach 스레딩 코드의 대부분은 실제로 문서화되지 않았습니다. 나는 시스템 헤더에서 대부분 그것을 파헤쳐 야했다. 그 중 하나를 사용하는 방법을 알아 내려고했다. 그것은 성가신 것이다. – bnaecker