Бег по времени - PullRequest
       12

Бег по времени

2 голосов
/ 23 декабря 2010

Скажем, у меня есть база данных с таблицей, каждая запись в этой таблице соответствует действию, которое должно быть выполнено.В этой таблице есть поле даты и времени, в котором хранится следующий момент, когда должно быть выполнено действие.

Эта таблица читается службой Windows, а действия хранятся в структуре данных.Каждые несколько минут служба читает таблицу, и новые действия объединяются в структуру данных, поэтому созданные в это время действия не пропускаются.

Каждое действие имеет определенный интервал повторения.Когда действие выполнено, поле datetime обновляется до следующего момента, когда оно должно выполняться на основе этого интервала.

Теперь вот где я задаюсь вопросом о правильном курсе действий: какой способ предпочтительнее на самом деленачать действие в указанное время?

Скажем, у меня есть действие, которое должно быть запущено в 09:00 в структуре данных, как мне обеспечить его запуск в 09:00?В данный момент я имею в виду проверку структуры данных каждую минуту, сравнение текущего времени со временем, запланированным для действия, и, если они совпадают, выполнение действия и обновление времени выполнения действия в соответствии с соответствующим интервалом.

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

Моя главная задача - хороший подход для проверки того, должно ли быть выполнено действие, и последует соответствующая структура данных.Количество действий в таблице будет очень низким, не более 25. У меня нет контроля над базой данных, поэтому все должно быть сделано программно на C # на случай, если вам интересно.Любые советы, опыт или советы?

Ответы [ 4 ]

1 голос
/ 23 декабря 2010

Использовать существующее решение ...

http://quartznet.sourceforge.net/

1 голос
/ 23 декабря 2010

Скажите, гранулярность составляет 1 минуту. Я хотел бы, чтобы один поток часто опрашивал БД и обновлял список вещей, которые должны появиться в следующую минуту. Затем отдельная ветка таймера может просто запустить этот список действий, когда тикает минута.

Когда вы углубляетесь в детали, все становится немного сложнее, так как вы, возможно, захотите держать узкие узлы на конечном автомате, связанном с ним (подготовлен, запущен, завершен и т. Д.).

0 голосов
/ 23 декабря 2010

что делать, если у вас был экземпляр таймера как часть структуры данных, и запланируйте его запуск один раз, когда это действие должно быть выполнено. таким образом вам не нужно проверять, и как только вы помещаете свою структуру в очередь или список, вы знаете, что она запланирована для запуска. таймер сработает в отдельном потоке, и ваш код будет работать асинхронно с той частью, которая обращается к БД ...

0 голосов
/ 23 декабря 2010

Агент SQL кажется хорошим выбором, но вы не получите отклика на клиентское приложение '.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...