unit Ut_CustomThread;
interface
uses
Classes, SysUtils, SyncObjs,Ut_ResourceStrings,Windows;
Type
//基本线程类
TBaseThread = class;
//线程错误处理类
EThreadException = class(Exception);
//线程等待错误处理类
EThreadTerminateAndWaitFor = class(EThreadException);
//线程停止模式
TThreadStopMode = (smTerminate, smSuspend);
//例外线程事件函数事件
TExceptionThreadEvent = procedure(AThread: TBaseThread; AException: Exception) of object;
//线程事件通知函数事件
TNotifyThreadEvent = procedure(AThread: TBaseThread) of object;
//同步线程事件
TSynchronizeThreadEvent = procedure(AThread: TBaseThread; AData: Pointer) of object;
//自定义线程类
TCustomThread = class(TThread)
public
//同步线程方法
procedure Synchronize(Method: TThreadMethod); overload;
//同步方法事件
procedure Synchronize(Method: TMethod); overload;
//返回值
property ReturnValue;
//结束线程
property Terminated;
End;
//基本线程类
TBaseThread = class(TCustomThread)
protected
//数据对象 可以是任何一对象
FData: TObject;
// 临界区 用来线程数据保护同步
FLock: TCriticalSection;
//线程停止模式
FStopMode: TThreadStopMode;
//是否停止
FStopped: Boolean;
//线程例外字符串
FTerminatingException: string;
//线程停止意外类
FTerminatingExceptionClass: TClass;
//意外事件
FOnException: TExceptionThreadEvent;
//通知线程停止事件
FOnStopped: TNotifyThreadEvent;
//
//处理例外时间
procedure DoException (AException: Exception); virtual;
//处理停止事件
procedure DoStopped; virtual;
//具体执行
procedure Execute; override;
//当前线程是否停止
function GetStopped: Boolean;
//抽象运行
procedure Run; virtual; abstract;
public
//运行后
procedure AfterRun; virtual; //3* Not abstract - otherwise it is required
//执行后
procedure AfterExecute; virtual;//5 Not abstract - otherwise it is required
//执行前
procedure BeforeExecute; virtual;//1 Not abstract - otherwise it is required
//运行前
procedure BeforeRun; virtual; //2* Not abstract - otherwise it is required
//释放
procedure Cleanup; virtual;//4*
//创建
constructor Create(ACreateSuspended: Boolean = True); virtual;
//释放
destructor Destroy; override;
//开始
procedure Start; virtual;
// 停止
procedure Stop; virtual;
// Here to make virtual
procedure Terminate; virtual;
//等待推出线程
procedure TerminateAndWaitFor; virtual;
//当前对象
prop