AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem mit GetProcessAffinityMask [wie verwenden?]
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit GetProcessAffinityMask [wie verwenden?]

Ein Thema von Daniel G · begonnen am 16. Jul 2005 · letzter Beitrag vom 26. Sep 2017
Antwort Antwort
Seite 1 von 2  1 2      
Daniel G
(Gast)

n/a Beiträge
 
#1

Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 16. Jul 2005, 00:35
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:
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?

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
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 16. Jul 2005, 02:40
Moin moin,

versuchs mal mit GetCurrentProcessId
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 16. Jul 2005, 04:16
Du musst die Masken ja noch auswerten, denke ich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Basilikum

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

Re: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 16. Jul 2005, 10: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
Olli
(Gast)

n/a Beiträge
 
#5

Re: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 16. Jul 2005, 10:58
Wieviele CPUs? -> SYSTEM_INFO an GetSystemInfo() übergeben und auswerten.
Nur konfigurierte CPUs werden ausgegeben!!!

Zitat von Daniel G:
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?
Bei Bitmasken betrachtet man üblicherweise gerade nicht die "Werte" sondern die gesetzten Bits ...

Bitmask AND 2^0 = Bit0
Bitmask AND 2^1 = Bit1
...
Bitmask AND 2^31 = Bit31

Zitat von Daniel G:
Wie bekomme ich denn nun heraus, auf welchem Prozessor mein Programm läuft
Die Affinity Mask eines Prozesses besagt ja gerade auf welchen Prozessoren dein Prozess laufen darf. Üblicherweise dürfte das ein einziges Bit sein. Leider habe ich kein SMP-System

Edit: na super, das passiert wenn man zwischendurch telefoniert und trotzdem keine rote Box kommt.
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#6

Re: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 16. Jul 2005, 12:02
Ä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...
Angehängte Dateien
Dateityp: zip gpam_test-1_197.zip (21,2 KB, 36x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 4. Jan 2006, 11:57
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
Daniel Schuhmann
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#8

AW: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 22. Nov 2012, 18:40
Aus gegebenem Anlass möchte ich dieses Thema nochmal aufgreifen, da Delphi XE3 hier anstatt zwei DWords nun DWord-Pointer zurückliefert:

Delphi-Quellcode:
function GetProcessAffinityMask(hProcess: THandle;
  var lpProcessAffinityMask, lpSystemAffinityMask: DWORD_PTR): BOOL; stdcall;
Nun stellt sich die Frage, wie man das trotzdem in zwei normale DWords überführen kann?
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 22. Nov 2012, 19:10
Wer sagt, daß das Pointer sind?

Schau mal nach wie DWORD_PTR deklariert ist


Tipp: http://msdn.microsoft.com/en-us/library/cc230322.aspx
$2B or not $2B
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

AW: Problem mit GetProcessAffinityMask [wie verwenden?]

  Alt 10. Apr 2013, 18:58
Schau mal nach wie DWORD_PTR deklariert ist

Tipp: http://msdn.microsoft.com/en-us/library/cc230322.aspx
Eine ausführliche Beschreibung dazu findet sich hier.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz