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