Как построить таймер с очень низким разрешением? - PullRequest
4 голосов
/ 16 февраля 2010

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

Есть ли лучший способ, чем повторно переводить программу в спящий режим на max_integer секунды / милисекунды?

Ответы [ 2 ]

16 голосов
/ 16 февраля 2010

Я бы не стал делать это как службу Windows. Я бы запустил его как запланированное задание.

Ваша служба будет просто спать в течение месяца и является пустой тратой ресурсов. Пусть ОС отслеживает время и запускает приложение для обработки раз в месяц.

4 голосов
/ 16 февраля 2010

Если вы можете избежать написания оконной службы, вы упростите свою жизнь - запланированные задачи могут быть лучшим вариантом здесь. Службы Windows лучше всего использовать для вещей, где есть некоторая постоянная фоновая активность, котораядолжно произойти - не для запуска задач в течение длительного периода времени.

Однако, если вы должны сделать это службой Windows, тогда вы не хотите устанавливать тайм-аут ожидания с большим таймером. Это определенно проблемный подход.Что произойдет, если ваше приложение будет перезапущено?Как он узнает, как долго он спит?Или что, если поток будет перезапущен?

Лучшим подходом является запись где-нибудь в базе данных записи, которая идентифицирует, когда следующий импорт должен произойти как дата / время. Ваша служба Windows можетпериодически просыпайтесь (каждые несколько минут или часов) и смотрите, превышает ли текущая дата / время это значение.Если это так, запустите импорт и обновите дату следующего запуска в базе данных до следующего запуска.

Если ваше приложение перезапускается, вы просто считываете значение из базы данных и продолжаете, как и раньше.

...