[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/13 11:51 / Filesize : 238 KB / Number-of Response : 924
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれDelphi(超初心者用)その46



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とか作ったらかなり便利になりそうだな。






[ 続きを読む ] / [ 携帯版 ]

全部読む 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<238KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef