Man kann ja mittels GetThreadAffinityMask \ SetThreadAffinityMask die erlaubten logischen CPU Cores ermitteln \ setzen, auf denen ein Thread ausgeführt werden darf. Gibt es auch eine Möglichkeit, zu ermitteln, auf welcher CPU der eigene Thread zur Zeit läuft?
Angenommen:
Ich hab 2 CPUs
1: Athlon 64 DualCore
2: Athlon 64 SingleCore
Die Affinity Mask ist nun auf 101b (jeweils erster Core der CPUs) gesetzt und mein Programm kommt zur Prüfroutine. Wie bekomme ich nun raus "Programm läuft auf CPU 1\Core 1, bzw. CPU 2?
Hintergrund: Für die Abfrage der CPU Informationen muss ich gezielt bestimmte CPUs ansprechen und benötige daher eine Möglichkeit festzustellen, ob der Sheduler bereits auf die entsprechende CPU umgeschaltet hat:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| GetCPUInfo(ItemID: Byte): TCPUInfo; begin GetAffinity While not aufRichtigerCPU Do Begin SetAffinity; Sleep(1); end;
SetAffinity end; |
Mir ist klar, dass diese Nutzung zur Sicherstellung der Unterbrechungsfreiheit RealTime Priority benötigt, da einige Abfragen nicht unterbrochen werden dürfen.
Moderiert von
Klabautermann: Code- durch Delphi-Tags ersetzt
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.