![]() |
Problem mit GetProcessAffinityMask [wie verwenden?]
N'Abend alle zusammen,
ich habe da ein kleines Problem mit GetProcessAffinityMask, das mich fast an den Rand des Wahnsinns treibt. Also, bislang habe ich mir das zusammengesucht:
Delphi-Quellcode:
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?
var
hProcess: THandle; BitMask, SysBitMask: DWord; begin hProcess := OpenProcess(PROCESS_QUERY_INFORMATION,true,GetCurrentProcess); GetProcessAffinityMask(hProcess, BitMask, SysBitMask); end; 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 "Remarks" habe ich natürlich gelesen und ich befürchte beinahe, dass das, was dort steht, verdammt wichtig ist. Nur blicke ich da im Moment überhaupt nicht durch. Kann mir wer (mal wieder) helfen? So long, Daniel |
Re: Problem mit GetProcessAffinityMask [wie verwenden?]
Moin moin,
versuchs mal mit GetCurrentProcessId :-) |
Re: Problem mit GetProcessAffinityMask [wie verwenden?]
Du musst die Masken ja noch auswerten, denke ich.
|
Re: Problem mit GetProcessAffinityMask [wie verwenden?]
Zitat:
versuch's mal mit
Delphi-Quellcode:
(GetCurrentProcess liefert ein Pseudo-Handle auf den eigenen Prozess)
GetProcessAffinityMask(GetCurrentProcess(),BitMask,SysBitMask)
Zitat:
![]() 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 ...) |
Re: Problem mit GetProcessAffinityMask [wie verwenden?]
Wieviele CPUs? -> SYSTEM_INFO an GetSystemInfo() übergeben und auswerten.
Nur konfigurierte CPUs werden ausgegeben!!! Zitat:
Bitmask AND 2^0 = Bit0 Bitmask AND 2^1 = Bit1 ... Bitmask AND 2^31 = Bit31 Zitat:
Edit: :wall: na super, das passiert wenn man zwischendurch telefoniert und trotzdem keine rote Box kommt. |
Re: Problem mit GetProcessAffinityMask [wie verwenden?]
Liste der Anhänge anzeigen (Anzahl: 1)
Ähä....
Ok, ich hoffe mal, das ichs jetzt verstanden habe: @alle, die ein Multi - Prozessorsystem ihr eigen nennen: Könnt ihr mal das angehängte Programm ausprobieren? Ich habe vier Prozessoren genommen, mich würden mal die Werte für BitMask und SysBitMask bei systemen interessieren, die mehrere Prozessoren besitzen. Wenn ich das richtig umgesetzt habe, dürfte da ja nur 1 oder 0 stehen. Wär auch gut, wenn ihr den Prozess mal nur auf den zweiten Prozessor legen könntet und mir dann die Werte sagen würdet. Vielen Dank, Daniel P.S.: Im Archiv ist die fertigkompillierte Echse, habe mir für Testzwecke einfach Luckie's ComboBox - Demo geschnappt. 'Tschuldigung. Hab' aber im QT darauf hingewiesen. // Edit: Luckie hat die Echse verkleinert... |
Re: Problem mit GetProcessAffinityMask [wie verwenden?]
Habs auf einem System mit zwei CPUs getestet:
Affinity CPU1+CPU2: CPU1: BitMask 1, SysBitMask 1 CPU2: BitMask 2, SysBitMask 2 CPU3: BitMask 0, SysBitMask 0 CPU4: BitMask 0, SysBitMask 0 Affinity nur CPU1 CPU1: BitMask 1, SysBitMask 1 CPU2: BitMask 0, SysBitMask 2 CPU3: BitMask 0, SysBitMask 0 CPU4: BitMask 0, SysBitMask 0 Affinity nur CPU2: CPU1: BitMask 0, SysBitMask 1 CPU2: BitMask 2, SysBitMask 2 CPU3: BitMask 0, SysBitMask 0 CPU4: BitMask 0, SysBitMask 0 |
AW: Problem mit GetProcessAffinityMask [wie verwenden?]
Aus gegebenem Anlass möchte ich dieses Thema nochmal aufgreifen, da Delphi XE3 hier anstatt zwei DWords nun DWord-Pointer zurückliefert:
Delphi-Quellcode:
Nun stellt sich die Frage, wie man das trotzdem in zwei normale DWords überführen kann?
function GetProcessAffinityMask(hProcess: THandle;
var lpProcessAffinityMask, lpSystemAffinityMask: DWORD_PTR): BOOL; stdcall; |
AW: Problem mit GetProcessAffinityMask [wie verwenden?]
Wer sagt, daß das Pointer sind?
Schau mal nach wie DWORD_PTR deklariert ist :zwinker: Tipp: ![]() |
AW: Problem mit GetProcessAffinityMask [wie verwenden?]
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz