스레드 풀을 만들려고합니다. 몇 줄의 예제가 있지만 SyncObjs 라이브러리에서 TSemaphore를 사용합니다.Delphi TSemaphore 소스 코드
저는 Delphi 6를 사용하고 있으며 SyncObjs에는 TSemaphore가 포함되어 있지 않습니다. 나는 그물을 둘러 보았고 그것을위한 소스 코드를 찾을 수 없다.
TSemaphore가 포함 된 델파이 6에서 작동하는 라이브러리가 있습니까?
스레드 풀을 만들려고합니다. 몇 줄의 예제가 있지만 SyncObjs 라이브러리에서 TSemaphore를 사용합니다.Delphi TSemaphore 소스 코드
저는 Delphi 6를 사용하고 있으며 SyncObjs에는 TSemaphore가 포함되어 있지 않습니다. 나는 그물을 둘러 보았고 그것을위한 소스 코드를 찾을 수 없다.
TSemaphore가 포함 된 델파이 6에서 작동하는 라이브러리가 있습니까?
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;
이것은 매우 간단합니다. 이것을 시작으로 당신이 원하는 모든 종소리와 호루라기를 추가 할 수 있어야합니다.
참고 :이 기능은 테스트하지 않았으므로 맹목적으로 이해하지 말고 복사하십시오.
감사합니다, 데이비드, 시작하기 좋은 곳 같습니다. –
'TSemaphore'는 Win32 세마포어 개체를 둘러싼 간단한 래퍼입니다. 쉽게 캡슐화 할 수있는 고유 한 클래스를 작성할 수 있습니다. MSDN 설명서부터 시작하십시오. –
실제로 Win32 API에는 스레드 풀 구현도 포함되어 있습니다. 바퀴를 재발 명하기 전에 (또는 OmmniThread에서) 하나를 사용하고 싶을 수도 있습니다. (실수 풀기도합니다.) – Daniel
@Daniel, Thread Pool API는 Vista 이후로 존재합니다. XP에 대한 지원이 사라지더라도 여전히 많은 기계가 실행되고 있습니다. – TLama