Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: ThreadPool API

  Alt 21. Feb 2014, 10:29
Also entweder selber übersetzen, wie Günther auch schon vorgeschlagen hat.
Ist ja eigentlich recht überschaubar.
Hier die Arbeit von fünf Minuten:

Delphi-Quellcode:
unit ThreadPool;

interface

uses
  Winapi.Windows;

type

TP_POOL = record

end;
PTP_POOL = ^TP_POOL;

function CreateThreadpool(reserved : Pointer = nil) : PTP_POOL; stdcall;

function SetThreadpoolThreadMinimum(ptpp: PTP_POOL; cthrdMin : DWORD) : BOOL; stdcall;

procedure SetThreadpoolThreadMaximum(ptpp: PTP_POOL; cthrdMost : DWORD); stdcall;

procedure CloseThreadpool(ptpp : PTP_POOL); stdcall;

function CreateThreadpool; external kernel32 name 'CreateThreadpool';
function SetThreadpoolThreadMinimum; external kernel32 name 'SetThreadpoolThreadMinimum';
procedure SetThreadpoolThreadMaximum; external kernel32 name 'SetThreadpoolThreadMaximum';
procedure CloseThreadpool; external kernel32 name 'CloseThreadpool';

implementation
end.
Delphi-Quellcode:
implementation

uses
  ThreadPool;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  MyThreadPool : PTP_POOL;
begin
  MyThreadPool := CreateThreadpool;
  if SetThreadpoolThreadMinimum(MyThreadPool, 1) then
  begin
    SetThreadpoolThreadMaximum(MyThreadPool, 100);
  end;
  CloseThreadpool(MyThreadPool);
end;

Auch ein möglicherweise effektiverer Weg wäre das erstellen einer C++-DLL, die die Funktionalität mithilfe eines COM-Interfaces für Delphi bereitstellt.
Der richtige Code kann direkt in C++ geschrieben werden, ohne jeden Mist an struct und Pointer (oder Pointer auf Pointer) zu übersetzen.
Das Interface-Objekt selber hätte dann nur die allernötigsten Methoden zum Verwalten des ThreadPools.
Delphi-Quellcode:
IThreadPool = interface(IUnknown)
  procedure SetMinimum(NumberOfThreads : DWORD); stdcall;
  procedure SetMaximum(NumberOfThreads : DWORD); stdcall;
end;
  Mit Zitat antworten Zitat