Zitat von
Daniel G:
Delphi-Quellcode:
var
hProcess: THandle;
BitMask, SysBitMask: DWord;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION,true,GetCurrentProcess);
GetProcessAffinityMask(hProcess, BitMask, SysBitMask);
end;
Nun sollen die Variablen "BitMask" und "SysBitMask" mir sagen, auf welchem Prozessor mein Programm läuft und wie viele Prozessoren mein Programm hat. Jage ich die Variablen aber durch den Debugger, haben sie verdammt große Werte, was ja irgendwie nicht die "BitMask" darstellen kann, oder?
die hohen Werte dürften direkt aus dem Zufallsgenerator (Stack
) stammen... bereits dein hProcess dürfte ungültig sein (OpenProcess erwartet einen Process
ID), GetProcessAffinityMask scheitert, *Mask bleiben unverändert...
versuch's mal mit
GetProcessAffinityMask(GetCurrentProcess(),BitMask,SysBitMask)
(GetCurrentProcess liefert ein Pseudo-
Handle auf den eigenen Prozess)
Zitat von
Daniel G:
Wie bekomme ich denn nun heraus, auf welchem Prozessor mein Programm läuft und wieviele Prozessoren das System hat? Das wäre wichtig für mich zu wissen, da ich im selben Atemzug auch noch SetProcessAffinityMask verwende und dort dann ja sicherlch dasselbe Problem auftreten wird.
die Prozessor-Anzahl bekommst Du mit
GetSystemInfo
und die Affinität Deines Programmes wird in der Maske abgebildet... sprich:
Bit 0 gesetzt (Mask and $00000001 > 0) - CPU 1 zugeordnet
Bit 1 gesetzt (Mask and $00000002 > 0) - CPU 2 zugeordnet
(while true do ...)