Не отрабатывает функция SetProcessPriorityBoost
От: MakcMN  
Дата: 03.06.08 18:44
Оценка:
Здравствуйте.

Столкнулся с тем, что при отключённом динамическом повышении приоритетов Windows всё равно его повышает. Пример кода:

#include <cstddef>
#include <cassert>
#include <tchar.h>
#include <windows.h>


DWORD WINAPI thread_proc(LPVOID parameter)
{
    OutputDebugString(_T("thread_proc begin\n"));
    for (;;)
        ;
    OutputDebugString(_T("thread_proc end\n"));
}

void create_thread()
{
    OutputDebugString(_T("create_thread begin\n"));

    HANDLE thread_handle = CreateThread(NULL, 0,
        thread_proc, 0, CREATE_SUSPENDED, NULL);

    assert(thread_handle != NULL);

    SetThreadPriority(thread_handle, THREAD_PRIORITY_ABOVE_NORMAL);
    ResumeThread(thread_handle);

    OutputDebugString(_T("create_thread end\n"));
}

int main()
{
    // Убираем динамическое повышение приоритетов для потоков процесса
    SetProcessPriorityBoost(GetCurrentProcess(), TRUE);

    // Разрешаем исполнять потоки процесса только на одном процессоре
    SetProcessAffinityMask(GetCurrentProcess(), 1);

    // Применяем настройки
    Sleep(0);


    create_thread();


    return 0;
}


Программа выводит:

create_thread begin
thread_proc begin
create_thread end


и нормально завершается.


Spy++ показывает следующие приоритеты нитей:

Строка create_thread();
    Основная нить:
        текущий 8
        базовый 8

    Дополнительная нить:
        ещё нет

Строка return 0;
    Основная нить:
        текущий 15
        базовый 8

    Дополнительная нить:
        текущий 9
        базовый 9


С чем может быть связано такое поведение, что-то не так вызвал?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.