我正在寻找一个线程池。我在线找到了几个例子,但他们在SyncObjs库中使用了TSemaphore。
我使用的是Delphi 6,而我的SyncObjs并不包含TSemaphore。我已经浏览了网络,无法找到任何源代码。
是否有适用于包含TSemaphore的Delphi 6的库?
答案 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;
这很简单。从这开始你应该能够添加你需要的任何铃声和口哨声。
请注意,我没有对此进行过测试,因此请不要盲目地复制它,而不要试图理解它。