Delphi TSemaphore源代码

Mic*_*ent 0 delphi semaphore delphi-6

我正在寻找一个线程池.我在线找到了几个例子,但他们在SyncObjs库中使用了TSemaphore.

我正在使用Delphi 6,而我的SyncObjs不包括TSemaphore.我环顾网络,找不到任何源代码.

是否有适用于包含TSemaphore的Delphi 6的库?

Dav*_*nan 7

TSemaphore类是在Win32 API信号灯的简单包装.以相同的样式创建一个简单的包装器非常容易.例如:

type
  TSemaphore = class
  private
    FHandle: THandle;
  public
    constructor Create(AInitialCount, AMaximumCount: Integer);
    destructor Destroy; override;
    procedure Acquire;
    function Release(AReleaseCount: Integer): Integer; overload;
    procedure Release; overload;
  end;

constructor TSemaphore.Create(AInitialCount, AMaximumCount: Integer);
begin
  inherited Create;
  FHandle := CreateSemaphore(nil, AInitialCount, AMaximumCount, nil);
  Win32Check(FHandle <> 0);
end;

destructor TSemaphore.Destroy;
begin
  if FHandle <> 0 then
    CloseHandle(FHandle);
  inherited;
end;

procedure TSemaphore.Acquire;
begin
  Win32Check(WaitForSingleObject(FHandle, INFINITE) = WAIT_OBJECT_0);
end;

function TSemaphore.Release(AReleaseCount: Integer): Integer;
begin
  Win32Check(ReleaseSemaphore(FHandle, AReleaseCount, @Result));
end;

procedure TSemaphore.Release;
begin
  Release(1);
end;
Run Code Online (Sandbox Code Playgroud)

这很简单.从这开始你应该能够添加你需要的任何铃声和口哨声.

请注意,我没有测试过这个,所以请不要盲目地复制它而不试图理解它.