unit LibCriticalSection;
interface
uses
Windows;
type
TCriticalSectionClass = class
private
FCreated: Boolean;
protected
__Critical: TRTLCriticalSection;
procedure InitializeCritical; virtual;
procedure DeleteCritical; virtual;
public
constructor Create; virtual;
destructor Destroy; override;
procedure EnterCritical; virtual;
procedure LeaveCritical; virtual;
end;
implementation
{ TCriticalSectionClass }
constructor TCriticalSectionClass.Create;
begin
InitializeCritical();
end;
destructor TCriticalSectionClass.Destroy;
begin
DeleteCritical();
inherited;
end;
procedure TCriticalSectionClass.InitializeCritical;
begin
if not FCreated then begin
InitializeCriticalSection(__Critical);
FCreated := TRUE;
end;
end;
procedure TCriticalSectionClass.DeleteCritical;
begin
if FCreated then begin
DeleteCriticalSection(__Critical);
FCreated := FALSE;
end;
end;
procedure TCriticalSectionClass.EnterCritical;
begin
if FCreated then EnterCriticalSection(__Critical);
end;
procedure TCriticalSectionClass.LeaveCritical;
begin
if FCreated then LeaveCriticalSection(__Critical);
end;
end.