2011-03-23 1 views
1

SetProcessAffinityMask() function accepte un masque DWORD de sorte qu'il ne peut pas être utilisé correctement sur les systèmes de plus de 32 processeurs.Comment remplacer SetProcessAffinityMask()/GetProcessAffinityMask() pour les systèmes de plus de 32 cœurs?

On dirait SetThreadGroupAffinity() est destiné à résoudre le problème d'une manière ou d'une autre, mais je peux «trouver des exemples de code utiles qui illustrent son utilisation?

Comment adapter mon programme en utilisant SetProcessAffinityMask()/GetProcessAffinityMask() pour les systèmes avec plus de 32 processeurs? Y a-t-il des exemples de code?

Répondre

1

Tout d'abord SetProcessAffinityMask() accepte DWORD_PTR. Étant donné que les versions 32 bits du système d'exploitation ne prennent pas en charge plus de 32 cœurs, cela signifie que vous parlez d'un système d'exploitation 64 bits. Et donc la limite réelle pour SetProcessAffinityMask() est donc 64.

Comme pour la façon de gérer> 64 Je pense que le livre blanc Supporting Systems That Have More Than 64 Processors vous dira ce que vous devez savoir.


EDIT

état Vous dans les commentaires que votre code est en cours d'exécution 32 bits sur 64 bits OS. Si je comprends bien, la prise en charge d'un contrôle très précis est limitée si vous utilisez l'émulateur 32 bits sur un système d'exploitation 64 bits. L'hypothèse est que si vous voulez profiter de ces nouvelles fonctionnalités, vous devez arrêter d'utiliser l'émulateur.

+0

Le problème est que mon code est en 32 bits et donc 'DWORD_PTR' est aussi en 32 bits. J'ai lu ce livre blanc avant de poser la question. – sharptooth

Questions connexes