Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Sonstiges (https://www.delphipraxis.net/45-library-sonstiges/)
-   -   Delphi Ein Thread einen bestimmten Prozessorkern zuordnen (https://www.delphipraxis.net/78125-ein-thread-einen-bestimmten-prozessorkern-zuordnen.html)

Phantom1 29. Sep 2006 12:42


Ein Thread einen bestimmten Prozessorkern zuordnen
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz