Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Sonstiges (https://www.delphipraxis.net/45-library-sonstiges/)
-   -   Delphi Multi-Prozessor - einem Prozess eine CPU zuweisen (https://www.delphipraxis.net/55836-multi-prozessor-einem-prozess-eine-cpu-zuweisen.html)

flomei 27. Okt 2005 18:18


Multi-Prozessor - einem Prozess eine CPU zuweisen
 
Es kann durchaus sinnvoll sein, dass ein Prozess von einer bestimmten CPU bearbeitet wird.
Aus diesem Thema stammt der folgende Code der von th_bone unter Mithilfe von Basilikum entwickelt wurde.
Mit ihm kann man einem bestimmten Prozess eine CPU zuweisen.

Für das eigene Programm:
Delphi-Quellcode:
SetProcessAffinityMask(GetCurrentProcess, 1); // 1=CPU0 , 2=CPU1
Für ein fremdes Programm (erweitert von Basilikum):
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(PROCESS_SET_INFORMATION, False, ID);
end;

function SetProcessAffinityMaskByID(ID,Affinity: DWORD): Boolean;
var
  handle: thandle;
begin
  handle := OpenProcess(PROCESS_SET_INFORMATION, False, ID);
  result:=(handle <> 0) and SetProcessAffinityMask(handle, Affinity);
  if (handle <> 0) then closehandle(handle);
end;

procedure TForm1.Button1click(Sender: TObject);
begin
  SetProcessAffinityMaskByID(GetProcessID('SOUNDMAN.EXE'), 1); // 1=CPU0 , 2=CPU1
end;
Dank an die Beiden.

[edit=Chakotay1308]Styleguide. Mfg, Chakotay1308[/edit]


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