2009-04-18 10 views
1

Mise à jour: Je trouve le problème - embarrassante/ironiquement assez, il a été l'appelait SetThreadAffinity() dans le mauvais fil, pas le principal (démarrage du programme est en désordre ...)SetThreadAffinityMask est ignoré .... des idées?

Ce tout fonctionne maintenant, merci pour tous l'aide! J'ai donné à tout le monde un sursaut pour avoir participé à ma petite session de débogage.

+0

Combien de threads avez-vous? Combien de processeurs? Est-ce que vous définissez l'affinité pour plusieurs threads, ou juste un? –

+0

J'ai deux processeurs, je ne fais que paramétrer l'affinité pour un thread. Les autres threads ne fonctionnent même pas pour le moment. –

+2

Veuillez ne pas effacer la question d'origine. Les gens pourraient avoir le même problème. – Thomas

Répondre

1

Est-ce que l'appelant comme celui-ci fait une différence ?:

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

Votre poignée de fil ont le nécessaire access rights:

Windows Server 2003 et Windows XP/2000 : Le handle doit avoir les droits d'accès THREAD_SET_INFORMATION et THREAD_QUERY_INFORMATION.

+0

Je suppose qu'il retournerait une erreur si je n'avais pas de droits. En outre, SetProcessAffinityMask() fonctionne parfaitement ... –

1

Je n'ai eu aucun problème avec cette fonction, même si cela fait quelques mois que je les ai utilisés.

Voici quelques choses que vous pourriez vouloir vérifier:

  • Ne pas contradictoires SetProcessAffinityMask et SetThreadAffinityMask
  • Si vous avez un fil sur le processeur 2, puis le reste du programme pourrait être en utilisant le processeur 1
  • Afficher GetCurrentProcessorNumber pour tester si son fonctionnement sur la bonne CPU.
+0

GetCurrentProcessorNumber() n'est pas disponible sous Windows XP ... –

+0

Alors je vous conseille de l'essayer sur Vista. – Unknown

1

Ce que vous faites semble correct, pourriez-vous essayer SetThreadIdealProcessor à la place?

+0

SetThreadIdealProcessor() donne exactement le même résultat. –

Questions connexes