Einzelnen Beitrag anzeigen

Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 

Ein Thread einen bestimmten Prozessorkern zuordnen

  Alt 29. Sep 2006, 12:42
Mit diesem Code kann man ein Thread einen bestimmten CPU Core zuweisen.

Delphi-Quellcode:
const
  THREAD_TERMINATE = $0001;
  THREAD_SUSPEND_RESUME = $0002;
  THREAD_GET_CONTEXT = $0008;
  THREAD_SET_CONTEXT = $0010;
  THREAD_SET_INFORMATION = $0020;
  THREAD_QUERY_INFORMATION = $0040;
  THREAD_SET_THREAD_TOKEN = $0080;
  THREAD_IMPERSONATE = $0100;
  THREAD_DIRECT_IMPERSONATION = $0200;
  THREAD_SET_LIMITED_INFORMATION = $0400;
  THREAD_QUERY_LIMITED_INFORMATION = $0800;
  THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $03FF;

function OpenThread(dwDesiredAccess: DWord;
                    bInheritHandle: Bool;
                    dwThreadId: DWord): DWord; stdcall; external 'kernel32.dll';

function SetThreadAffinityMaskByID(ID, AffinityMask: Cardinal): Boolean;
var
  Handle: THandle;
begin
  Result:=False;
  Handle:=OpenThread(THREAD_SET_INFORMATION or THREAD_QUERY_INFORMATION, False, ID);
  if Handle<>0 then begin
     Result:=SetThreadAffinityMask(Handle, AffinityMask)<>0;
     CloseHandle(Handle);
  end;
end;
So könnte ein Aufruf aussehen:
Delphi-Quellcode:
SetThreadAffinityMaskByID(GetCurrentThreadID, 1); // HauptThread auf prozessor core1 setzen
SetThreadAffinityMaskByID(WorkThread.ThreadID, 2); // WorkThread auf prozessor core2 setzen
  Mit Zitat antworten Zitat