2009-04-18 8 views
1

Update: Ich fand das Problem - beschämend/ironischerweise war es rief SetThreadAffinity() im falschen Thread, nicht der Haupt (Programmstart ist etwas chaotisch ...)SetThreadAffinityMask wird ignoriert .... irgendwelche Ideen?

Alles funktioniert jetzt, Dank für alle die Hilfe! Ich habe jedem eine positive Bewertung für die Teilnahme an meiner kleinen Debug-Sitzung gegeben.

+0

Wie viele Threads haben Sie? Wie viele Prozessoren? Setzen Sie Affinität für mehrere Threads oder nur für einen? –

+0

Ich habe zwei CPUs, ich setze nur Affinität für einen Thread. Die anderen Threads laufen im Moment gar nicht. –

+2

Bitte löschen Sie nicht die ursprüngliche Frage. Leute haben vielleicht das gleiche Problem. – Thomas

Antwort

1

Gibt es so einen Unterschied machen Aufruf ?:

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

Hat Ihr Thread-Handle haben die notwendige access rights:

Windows Server 2003 und Windows XP/2000 : Der Handle muss die Zugriffsrechte THREAD_SET_INFORMATION und THREAD_QUERY_INFORMATION Zugriffs haben.

+0

Ich nehme an, es würde einen Fehler zurückgeben, wenn ich keine Rechte hätte. Außerdem funktioniert SetProcessAffinityMask() perfekt ... –

1

Ich hatte keine Probleme mit dieser Funktion, obwohl es ein paar Monate her ist, seit ich sie benutzt habe.

Hier sind einige Dinge, die Sie überprüfen möchten:

  • Ich habe keine, widersprüchliche SetProcessAffinityMask und SetThreadAffinityMask
  • Wenn Sie einen Thread auf 2-Prozessor haben, dann wird der Rest des Programms könnte mit Prozessor 1
  • Anzeige GetCurrentProcessorNumber um zu testen, ob es auf der richtigen CPU läuft.
+0

GetCurrentProcessorNumber() ist in Windows XP nicht verfügbar ... –

+0

Dann würde ich Ihnen empfehlen, es auf Vista zu versuchen. – Unknown

1

Was Sie tun, scheint richtig, könnten Sie vielleicht versuchen, SetThreadIdealProcessor stattdessen?

+0

SetThreadIdealProcessor() gibt genau das gleiche Ergebnis. –

Verwandte Themen