2009-04-18 3 views
1

Обновление: Я нашел проблему - ошеломляюще/достаточно иронично это было звала SetThreadAffinity() в неправильном потоке, а не основной (один запуск программы неаккуратно ...)SetThreadAffinityMask игнорируется .... любые идеи?

Это все работает сейчас, спасибо за все помощь! Я дал всем преимущество для участия в моей маленькой сессии отладки.

+0

Сколько у вас есть потоков? Сколько процессоров? Вы устанавливаете близость к нескольким потокам или только одному? –

+0

У меня два процессора, я только устанавливаю близость к одному потоку. В настоящее время другие потоки не работают. –

+2

Пожалуйста, не удаляйте исходный вопрос. У людей может быть такая же проблема. – Thomas

ответ

1

ли называть его, как это делает никакой разницы ?:

DWORD_PTR mask = 1; 
SetThreadAffinityMask(GetCurrentThread(), mask); 

делает ваш поток ручки имеют необходимую access rights:

Windows Server 2003 и Windows, XP/2000 : Ручка должна иметь права доступа THREAD_SET_INFORMATION и THREAD_QUERY_INFORMATION.

+0

Я предполагаю, что он вернет ошибку, если у меня не будет прав. Кроме того, SetProcessAffinityMask() отлично работает ... –

1

У меня не было никаких проблем с этой функцией, хотя прошло несколько месяцев с тех пор, как я их использовал.

Вот некоторые вещи, которые вы можете проверить:

  • Не имеют конфликтующие SetProcessAffinityMask и SetThreadAffinityMask
  • Если у вас есть один поток на процессоре 2, то остальная часть программы может быть с помощью процессора 1
  • Показать GetCurrentProcessorNumber проверить, работает ли он на правом CPU.
+0

GetCurrentProcessorNumber() недоступен в Windows XP ... –

+0

Тогда я бы посоветовал вам попробовать его в Vista. – Unknown

1

Что вы делаете, кажется правильным, вы могли бы попробовать вместо этого SetThreadIdealProcessor?

+0

SetThreadIdealProcessor() дает точно такой же результат. –

Смежные вопросы