0

コンポーネント階層のすべてのレベルでタイマーを必要とするシステムを設計しています。複数のタイマーが同時にアクティブになる場合がありますが、相互に作用する必要があります(コンポーネントのタイマーを停止すると、子孫のタイマーが停止し、コンポーネントのタイマーを開始すると、祖先のタイマーが開始し、兄弟のタイマーが停止します)。

タイマーにはそれぞれ異なる制限があり、ティック、開始、停止、および期限切れのイベントをリスナーに送信します。

これはまだ設計段階の初期段階です(実装言語はまだ決定されていません)が、スレッドの混乱を避けたいと思います。何かアドバイス?

4

1 に答える 1

2

あなたが投稿したものに基づいてアドバイスを与えるのは難しいです。おそらく、スレッドを完全に避けて、単一のタイマーとイベントのデータベーステーブルを用意するだけです。タイマーが切れたら、今より古いイベントをすべて選択して起動します。次に、イベントテーブルの最小タイムスタンプを選択して今すぐ減算し、その間隔でスリープします。ループ。

while (1) {
    SELECT * FROM EVENTS WHERE ev_time < now() order by ev_time;
    while (num_rows_selected > 0) {
        for (i = 0; i < num_rows_select; ++i) {
             fetch row
             process row
        }
        SELECT * FROM EVENTS WHERE ev_time < now() order by ev_time;
    }
    SELECT MIN(ev_time)-NOW() as Interval FROM EVENTS
    sleep(Interval);
}
于 2009-01-18T00:42:25.500 に答える