⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umultithreadctrl.pas

📁 定时扫描局域网络中的电脑的Mac地址情况
💻 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 + -