Дизайн для нескольких взаимодействующих таймеров - PullRequest
0 голосов
/ 18 января 2009

Я разрабатываю систему, которой требуются таймеры на всех уровнях иерархии компонентов. Несколько таймеров могут быть активными одновременно, но они должны взаимодействовать друг с другом (остановка таймера компонента останавливает таймеры его потомков, в то время как запуск таймера компонента запускает таймеры его предков и останавливает таймеры его братьев и сестер).

Каждый таймер имеет разные ограничения и будет посылать события tick, start, stop и expire слушателям.

Это все еще на ранней стадии разработки (язык реализации все еще не определен), но я хочу избежать многопоточности. Любой совет?

1 Ответ

2 голосов
/ 18 января 2009

Трудно дать совет, основываясь на том, что вы опубликовали. Возможно, избежать потоков полностью и просто иметь один таймер и таблицу событий в базе данных. Когда таймер выключается, вы выбираете все события старше, чем сейчас, и запускаете их. Затем выберите минимальную метку времени таблицы вычитания сейчас и спите для этого интервала. Loop.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...