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, чтобы проверить, работает ли он на нужном процессоре.
Другие вопросы по тегам