📄 umultithreadctrl.pas
字号:
//
// Copyright (c) 2002 by Max Koudelkin
// Commercial use requires permission.
// E-mail to: maxxx@avia.formoza.ru
//
unit uMultiThreadCtrl;
interface
uses
Windows, SysUtils, Classes;
type
TExceptionEvent = procedure (
ASender : TObject;
AException : Exception ) of object;
TMultiThreadCtrl = class( TComponent )
private
FPropertiesLock : TRTLCriticalSection;
FActive : Boolean;
FOnException : TExceptionEvent;
procedure SetActive( AValue : Boolean );
protected
procedure LockProperties;
procedure UnLockProperties;
procedure Start; virtual; abstract;
procedure Stop; virtual; abstract;
procedure HandleException( AException : Exception ); virtual;
public
property Active : Boolean read FActive write SetActive;
property OnException : TExceptionEvent
read FOnException
write FOnException;
constructor Create( AOwner : TComponent ); override;
destructor Destroy; override;
procedure BeforeDestruction; override;
end;
implementation
{ TMultiThreadCtrl }
constructor TMultiThreadCtrl.Create( AOwner : TComponent );
begin
inherited;
InitializeCriticalSection( FPropertiesLock );
end;
destructor TMultiThreadCtrl.Destroy;
begin
DeleteCriticalSection( FPropertiesLock );
inherited;
end;
procedure TMultiThreadCtrl.BeforeDestruction;
begin
Active := False;
end;
procedure TMultiThreadCtrl.HandleException( AException : Exception );
begin
if Assigned( FOnException ) then
FOnException( Self, AException );
end;
procedure TMultiThreadCtrl.LockProperties;
begin
EnterCriticalSection( FPropertiesLock );
end;
procedure TMultiThreadCtrl.UnLockProperties;
begin
LeaveCriticalSection( FPropertiesLock );
end;
procedure TMultiThreadCtrl.SetActive( AValue : Boolean );
begin
LockProperties;
try
if FActive <> AValue then
begin
FActive := AValue;
if AValue then Start
else Stop;
end;
finally
UnLockProperties;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -