SetThreadAffinityMask игнорируется.... есть идеи?
Обновление: я обнаружил проблему - достаточно смущающе / иронично, что он вызывал SetThreadAffinity() не в том потоке, а не в главном (запуск программы грязный...)
Теперь все работает, спасибо за помощь! Я дал всем одобрение за участие в моей небольшой сессии отладки.
3 ответа
Имеет ли это такое значение?:
DWORD_PTR mask = 1;
SetThreadAffinityMask(GetCurrentThread(), mask);
Имеет ли ваш дескриптор потока необходимые права доступа?
Windows Server 2003 и Windows XP / 2000: дескриптор должен иметь права доступа THREAD_SET_INFORMATION и THREAD_QUERY_INFORMATION.
То, что вы делаете, кажется правильным, не могли бы вы вместо этого попробовать SetThreadIdealProcessor?
У меня не было проблем с этой функцией, хотя прошло уже несколько месяцев с тех пор, как я их использовал.
Вот некоторые вещи, которые вы можете проверить:
- Не иметь конфликтующих SetProcessAffinityMask и SetThreadAffinityMask
- Если у вас есть один поток на процессоре 2, то остальная часть программы может использовать процессор 1
- Отобразите GetCurrentProcessorNumber, чтобы проверить, работает ли он на нужном процессоре.