Delphi TSemaphore源代码

时间:2014-07-04 13:58:46

标签: delphi semaphore delphi-6

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

我使用的是Delphi 6,而我的SyncObjs并不包含TSemaphore。我已经浏览了网络,无法找到任何源代码。

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

1 个答案:

答案 0 :(得分: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;

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

请注意,我没有对此进行过测试,因此请不要盲目地复制它,而不要试图理解它。