문제

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 어쨌든.그러나 다른 한편으로는 나의 조언은 여전히 서서,당신은 당신을 통과해야에서 취급하지 포인터이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top