Einzelnen Beitrag anzeigen

Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#1

Multi-Prozessor - einem Prozess eine CPU zuweisen

  Alt 27. Okt 2005, 18:18
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:
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]
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat