SetThreadAffinityMask (), кажется, не работает, если функция потока содержит & quot; printf () & quot;

Я написал тестовую программу для привязки потока к процессору. Вот мой тестовый код:

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
DWORD WINAPI ThreadFunc(LPVOID pM) {
while(1) {
printf("Doesn't work anymore");   //If i add this printf function,the setthreadaffinitymask seems doesn't work anymore.Which u can see from two pictures i post.
}
}
int main()
{
HANDLE h;
DWORD_PTR RetFlag;
h = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
if((RetFlag = SetThreadAffinityMask(h, 0x08)) == 0)
printf("SetThreadAffinityMask fails\n");
WaitForSingleObject(h, INFINITE);
return 0;
}

CPU Rate Pic без printf ()

Скорость CPU Pic с printf ()

И, конечно, правильный результат должен быть похож на рис. Но что будет, если я добавлю функцию printf () в функцию потока? Есть какой-то трюк, которого я не знаю? Спасибо …

0

Решение

Я думаю, что близость работает, но проблема в том, что printf() записывает некоторый текст (в консоль?) и синхронно ожидает текст для записи.

Теперь этот текст должен быть напечатан где-то, и это где-то отвечает за другой поток / процесс, это может быть даже реальный ввод-вывод на диск или в сеть. Вот почему вы видите снижение загрузки ЦП CPU3: он простаивает в ожидании завершения ввода-вывода.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]