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:
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