DELPHI基于线程的定时器和一个泛型对象池
来源:互联网 发布:淘宝开店流程步骤ppt 编辑:程序博客网 时间:2024/06/09 23:52
笔记
unit ThreadTimer;//次编译指令仅在测试时使用,请勿在Release版本中打开{$DEFINE RunInMainThread}interfaceuses SysUtils, Classes, SyncObjs;type TThreadTimer = class(TObject) private FEnabled: Boolean; FWaitEvent: TEvent; FOnTimer: TNotifyEvent; FInterval: Integer; FWorkThread: TThread; procedure SetEnabled(const Value: Boolean); procedure DoInterval; procedure DoTimer; procedure StartTimer; procedure StopTimer; public constructor Create; destructor Destroy; override; property Enabled: Boolean read FEnabled write SetEnabled; property Interval: Integer read FInterval write FInterval; property OnTimer: TNotifyEvent read FOnTimer write FOnTimer; end; TWorkThread = class(TThread) private FOwner: TThreadTimer; procedure DoTimer; protected procedure Execute; override; public constructor Create(AOwner: TThreadTimer); end;implementation{ TThreadTimer }constructor TThreadTimer.Create;begin inherited Create; FInterval := 1000; FWaitEvent := TEvent.Create(nil, False, False, ''); FWorkThread := nil;end;destructor TThreadTimer.Destroy;begin StopTimer; FreeAndNil(FWaitEvent); inherited;end;procedure TThreadTimer.DoInterval;begin FWaitEvent.WaitFor(FInterval);end;procedure TThreadTimer.DoTimer;begin if Assigned(FOnTimer) then FOnTimer(Self);end;procedure TThreadTimer.SetEnabled(const Value: Boolean);begin if FEnabled <> Value then begin if Value then StartTimer else StopTimer; FEnabled := Value; end;end;procedure TThreadTimer.StartTimer;begin if FWorkThread = nil then begin FWorkThread := TWorkThread.Create(Self); FWaitEvent.ResetEvent; FWorkThread.Start; end;end;procedure TThreadTimer.StopTimer;begin if FWorkThread <> nil then begin FWorkThread.Terminate; //设置信号 FWaitEvent.SetEvent; //等待结束 FWorkThread.WaitFor; FreeAndNil(FWorkThread); end;end;{ TWorkThread }constructor TWorkThread.Create(AOwner: TThreadTimer);begin inherited Create(True); FOwner := AOwner;end;procedure TWorkThread.DoTimer;begin FOwner.DoTimer;end;procedure TWorkThread.Execute;begin while not Self.Terminated do begin FOwner.DoInterval; if not Self.Terminated then begin {$IFDEF RunInMainThread} Synchronize(Self.DoTimer); {$ELSE} FOwner.DoTimer; {$ENDIF} end; end;end;end.
泛型对象池
unit ObjectPool;interfaceuses Classes, SyncObjs, SysUtils, Generics.Collections, ThreadTimer;type TObjectPool<T> = class private FCacheList: TThreadList<T>; FTimer: TThreadTimer; FMaxPoolSize: Cardinal; FMinPoolSize: Cardinal; procedure InitObjectPool(const APoolSize: Cardinal); public constructor Create(AObject: T; AMaxPoolSize: Cardinal = 5; AMinPoolSize: Cardinal = 3); destructor Destroy; override; property MaxPoolSize: Cardinal read FMaxPoolSize write FMaxPoolSize; property MinPoolSize: Cardinal read FMinPoolSize write FMinPoolSize; end;implementation{ TObjectPool<T> }constructor TObjectPool<T>.Create(AObject: T; AMaxPoolSize, AMinPoolSize: Cardinal);begin FCacheList := TThreadList<T>.Create; FTimer := TThreadTimer.Create; FTimer.Interval := 30000; //30秒检查一次 FMaxPoolSize := AMaxPoolSize; FMinPoolSize := AMinPoolSize; InitObjectPool(AMinPoolSize);end;destructor TObjectPool<T>.Destroy;var I: Integer; LockList: TList<T>;begin if Assigned(FCacheList) then begin LockList := FCacheList.LockList; try for I := 0 to LockList.Count - 1 do FreeAndNil(LockList.Items[I]); finally FCacheList.UnlockList; FCacheList.Free; end; end; FTimer.Free; inherited;end;procedure TObjectPool<T>.InitObjectPool(const APoolSize: Cardinal);beginend;end.
0 0
- DELPHI基于线程的定时器和一个泛型对象池
- Delphi定时器线程
- 线程池和定时器
- 独立线程实现消息循环的Delphi定时器类
- 基于HashedWheelTimer的一个定时器实现
- delphi 中的一个线程池单元的归纳说明
- delphi 一个简单的线程池类 已经初步完善
- delphi 中的一个线程池单元的归纳说明
- delphi 内核同步对象单元 其中包括精确的定时器
- \t\t线程池中执行的状态 和 定时器
- 自己封装的多媒体定时器类和时间核心对象线程类
- Delphi驱动开发研究之内核同步对象—线程与定时器
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发 server 框架
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发 server 框架
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发 server 框架
- SPServer : 一个基于线程池(包括HAHS和LF)的高并发
- 封装多媒体定时器类和时间核心对象线程类
- (8)线程的同步和定时器
- Study Note: Optimization in MapReduce
- php通过iframe实现局部刷新
- shared_ptr线程安全性全面分析
- B树代码
- Ubuntu安装搜狗拼音
- DELPHI基于线程的定时器和一个泛型对象池
- JAVA WEB学习--环境配置
- MOS(Doc ID 1029252.6)最佳实践
- 屏幕旋转调用的方法
- JAVA设计模式
- sql server ddl触发器限制用户创建表
- bootstrap2.x与3的区别
- Android基础——2.Android Studio
- java .class