- 71 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 12:29:04 ]
- type
TTask = class(TAction) property OnBeforeExecute; property OnAfterExecute; ...その他いろいろ.. end; TTaskList = class Items: TObjectList; procedure Add(Task: TAction; RemoveOldTask: Boolean = False; DelayMSec: Integer = 0; RepeatCount: Integer = 1); function Exist(Task: TTask): Boolean; procedure Remove(Task: TTask); procedure Execute; end; procedure TForm1.Button1Click; begin TaskList.Add(ActionLoadData); TaskList.Add(ActionProcessData); TaskList.Add(ActionPrintData); end; procedure TForm1.ApplicationIdle; begin TaskList.Execute; // 登録タスクをひとつ実行 end; みたいなタスク(アクション)スケジューラを導入したらスパゲッティなイベントの流れがとてもシンプルになった。 今まではイベントハンドラ中からイベントハンドラを呼び出して更にApplication.ProcessMessagesが他のもの呼び出して・・・と依存関係やタイミングに起因するバグの温床になってたのがかなり減りそうな予感。 こういうクラスって既によく練られたものがどこかにあったりする? Executeイベントハンドラをサブスレッドで実行できるTaskとか作ったらかなり便利になりそうだな。
|

|