掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SetTimerで、タイマーを作るには? (ID:964)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
そうですねぇ…。どうしましょう。 案その1 にしのさんのおっしゃるような、スレッドを作って内部的にカウントする方法を使う。 案その2 Application.ProcessMessagesを使って、メッセージループを横取りしてしまう。やはり内部的なカウントには変わりないですが。 たとえば、 すべてのタイマーを管理するTTimerListクラスをグローバルに作っておいて、 そいつにTimerを追加していくという方法とか。 uses MMSystem; // TTimerList.FTimerList : TList; // TMultiTimer.FInterval , FCallbackTime : DWORD; // TMultiTimer.FOnTimer : procedure(sender:TObject;dwTime:DWORD) of object; procedure TTimerList.Loop; var dwCurrent : DWORD; i : integer; begin repeat Application.ProcessMessages; // 現在の時刻 dwCurrent := TimeGetTime; // とりあえず総当りで調べてみる。 for i := 0 to FTimerList.Count-1 do begin with TMultiTimer(FTimerList[i]) do begin if FCallbackTime >= dwCurrent then begin FCallbackTime := dwCurrent + FInterval; // FCallbackTime + FInterval if Assigned(FOnTimer) then FOnTimer(Self,dwCurrent); end; end; // with end; // for until Application.Terminated; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.