변경 부스트 스레드를 우선 순위에서 윈도우
-
03-07-2019 - |
문제
Im 을 변경하려고 스레드에 우선 순위가 높지만을 가지고 있습니다.기있는 나쁜 손잡이러(6)에서 GetLastError 기능입니다.나는 하지만 native_handle()반환 핸들을 위한 스레드가?
하나 어떻게 하면 이렇게 할 수 있습니까?
void baseThread::applyPriority(uint8 priority)
{
#ifdef WIN32
if (!m_pThread)
return;
BOOL res;
HANDLE th = m_pThread->native_handle();
switch (priority)
{
case REALTIME : res = SetPriorityClass(th, REALTIME_PRIORITY_CLASS); break;
case HIGH : res = SetPriorityClass(th, HIGH_PRIORITY_CLASS); break;
case ABOVE_NORMAL : res = SetPriorityClass(th, ABOVE_NORMAL_PRIORITY_CLASS); break;
case NORMAL : res = SetPriorityClass(th, NORMAL_PRIORITY_CLASS); break;
case BELOW_NORMAL : res = SetPriorityClass(th, BELOW_NORMAL_PRIORITY_CLASS); break;
case IDLE : res = SetPriorityClass(th, IDLE_PRIORITY_CLASS); break;
}
if (res == FALSE)
{
int err = GetLastError();
}
#endif
}
편집:최종 코드:
void baseThread::applyPriority(uint8 priority)
{
#ifdef WIN32
if (!m_pThread)
return;
BOOL res;
HANDLE th = m_pThread->native_handle();
switch (priority)
{
case REALTIME : res = SetThreadPriority(th, THREAD_PRIORITY_TIME_CRITICAL); break;
case HIGH : res = SetThreadPriority(th, THREAD_PRIORITY_HIGHEST); break;
case ABOVE_NORMAL : res = SetThreadPriority(th, THREAD_PRIORITY_ABOVE_NORMAL); break;
case NORMAL : res = SetThreadPriority(th, THREAD_PRIORITY_NORMAL); break;
case BELOW_NORMAL : res = SetThreadPriority(th, THREAD_PRIORITY_BELOW_NORMAL); break;
case IDLE : res = SetThreadPriority(th, THREAD_PRIORITY_LOWEST); break;
}
#endif
}
해결책
SetThreadPriority 함수를 사용하여 스레드 우선 순위를 설정하십시오. SetPriorityClass는 프로세스의 우선 순위를 설정하는 데 사용됩니다. 또한 우선 순위 값을 변경해야합니다. setthreadpriority 자세한 내용은.
다른 팁
이 SetPriorityClass
기능으로 그것의 첫 번째 매개 변수 처리,당신이 통과에 대한 포인터를 처리합니다.그것을 변경하기:
res = SetPriorityClass(*th, REALTIME_PRIORITY_CLASS);
거나 뭔가 동일합니다.커널은 말할 수 있는 포인터 값을 전달되지 않습니다 정말 유효한 스레드를 처리하기 때문에 나는 그것을 유지하는 내부의 목록을 현재에 할당된 스레드를 처리합니다.포인터를 분명하지 않에서는 목록이다.컴파일할 수 없을 시행하는 더 나은 유형에 안전하기 때문에,처리 종류의 불투명한 유형 단지 당신이 정말 조심 당신이 무엇을 전달합니다.
오 방법으로,다른 주석 대니정, SetPriorityClass
에는 사용되지 않습의 우선 순위를 설정 스레드에,당신은 당신을 사용하고 싶 SetThreadPriority
어쨌든.그러나 다른 한편으로는 나의 조언은 여전히 서서,당신은 당신을 통과해야에서 취급하지 포인터이다.
제휴하지 않습니다 StackOverflow