Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#4

Re: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 16. Jul 2005, 09:49
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 ProcessID), 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 MSDN-Library durchsuchenGetSystemInfo

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 ...)
  Mit Zitat antworten Zitat