Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Multi-Processor - einem Process eine CPU zuweisen (https://www.delphipraxis.net/55816-multi-processor-einem-process-eine-cpu-zuweisen.html)

th_bone 27. Okt 2005 12:20


Multi-Processor - einem Process eine CPU zuweisen
 
Hi,

ich will einem programm in einem Multiprocessor system eine spezielle CPU zuweisen...

wenn ich das für mein eigenes program mache dann funktioniert dieser code:

Delphi-Quellcode:
SetProcessAffinityMask(GetCurrentProcess, 1); // 1=CPU0 , 2=CPU1
versuche ich es jetzt aber daselbe für ein fremdes program das im taskmanager angezeigt wird
geht es seltsamerweise nicht

Delphi-Quellcode:
function GetProcessID(Exename: string): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  result := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) = true then
    begin
      while Process32Next(hProcSnap, pe32) = true do
      begin
        if pos(Exename, pe32.szExeFile) <> 0 then
          result := pe32.th32ProcessID;
      end;
    end;
    CloseHandle(hProcSnap);
  end;
end;

function GetProcessHandleFromID(ID: DWORD): THandle;
begin
  result := OpenProcess(SYNCHRONIZE, False, ID);
  CloseHandle(result);
end;

procedure TForm1.Button1click(Sender: TObject);
var
handle: thandle;
begin
     handle:=GetProcessHandleFromID(GetProcessID('SOUNDMAN.EXE')); ;
     SetProcessAffinityMask(handle, 1); // 1=CPU0 , 2=CPU1
end;
Wo liegt hier mein Denkfehler ? Getcurrentprocess liefert doch auch das handle meiner
anwendung zurück oder irre ich mich ?

Danke

Ralf

Basilikum 27. Okt 2005 12:34

Re: Multi-Processor - einem Process eine CPU zuweisen
 
hier zerstörst du das Handle, bevor irgendwer irgendwas damit anfangen konnte (CloseHandle)... des weiteren dürften mehr Permissions als nur SYNCHRONIZE notwendig sein, um die Affinität zu ändern:
Delphi-Quellcode:
function GetProcessHandleFromID(ID: DWORD): THandle;
begin
  result := OpenProcess(SYNCHRONIZE, False, ID);
  CloseHandle(result);
end;

th_bone 27. Okt 2005 12:52

Re: Multi-Processor - einem Process eine CPU zuweisen
 
Hi,

danke dass war es...

Delphi-Quellcode:
function GetProcessHandleFromID(ID: DWORD): THandle;
begin
  result := OpenProcess(PROCESS_SET_INFORMATION, False, ID);
end;
so funzt es

nochmals danke

Tschüss

Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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