SetThreadAffinityMask не имеет никакого эффекта
Я хочу, чтобы тестовая программа работала только на CPU1, поэтому я пишу такой код
#include <iostream>
#include <windows.h>
int main(){
::SetThreadAffinityMask(::GetCurrentProcess(),1);
while(1)
;
return 0;
}
но когда я открываю диспетчер задач, я обнаруживаю, что CPU1 не используется полностью, и процент его использования постоянно меняется. Почему?CPU1 должен использовать 100%? извините за мой английский.
1 ответ
Решение
SetThreadAffinityMask
устанавливает близость нити, а не всего процесса. Если вы проверите возвращаемое значение, вы должны увидеть, что SetThreadAffinityMask
терпит неудачу. Чтобы получить текущий поток, используйте GetCurrentThread()
не GetCurrentProcess()
,
т.е. измените свой код на
SetThreadAffinityMask(GetCurrentThread(),1)
Если вы хотите установить сходство всего процесса, используйте
SetProcessAffinityMask(GetCurrentProcess(),1)