Организация таймера в сервисе
Подскажите как решить такую задачу:
необходимо через определенный промежуток времени получать почту, как в outlook'е скажем. Мое приложение это сервис т.е. консольное приложение. Задача сводится к тому, как организовать этот "промежуток" - таймер, получать почту я могу.
Есть время писать свой планировщик ?
Почему-бы не воспользоваться "schtasks.exe"
см. параметры коммандной строки - ты можешь из своей программы
создавать любые задачи, просматривать результат выполнения,
или отменять задания.
P.S.
Своего программного кода нужно писать настолько мало, насколько
это вообще возможно, но качественно.
В свое время (3 года назад) я уже решал Именно Эту задачу.
В моей программе сначала то-же был планировщик, и программа
постоянно висела в оперативной памяти 90% времени ничего не
делая, а только ожидая своего времени...
Затем я от этой практики отказался - перевел программу в режим работы
из коммандной строки - создал *.bat файл,
который запускает программу по расписанию, установленному в "Scheduled Tasks"
и вот уже несколько лет работает без проблем. За это время я потратил много сил
и времени на полезную доработку - защита от СПАМА, хитрые методы сортировки,
перекодировка всей почты в единый формат, ведение почтовой базы данных и др...
CreateWaitableTimer/SetWaitableTimer (Win32API)
Есть такой объект как таймер ожидания, с которой можно работать как с объектом Event, CreateWaitableTimer/SetWaitableTimer (Win32API)
Есть -то он есть , но в этой задаче он он не нужен.
Его имеет смысл использовать при ожидании новых данных... (слежение за файловыми событиями, чтение данных из сокета и др..)
Здесь ожидается только время, а время может потребовать ОЧЕНЬ сложного алгоритма ожидания - например только по четным дням, если они не суббота и воскресенье , с 10 до 18 с периодичностью 15 минут., и при условии, что комп. в это время не питается от аккумуляторных батарей и разбудить компьютер для выполнения задания.
Что-то мешает воспользоваться стандартным планировщиком "Scheduled Tasks" ?
Есть время писать свой планировщик ?
Почему-бы не воспользоваться "schtasks.exe"
см. параметры коммандной строки - ты можешь из своей программы
создавать любые задачи, просматривать результат выполнения,
или отменять задания.
P.S.
Своего программного кода нужно писать настолько мало, насколько
это вообще возможно, но качественно.
В свое время (3 года назад) я уже решал Именно Эту задачу.
В моей программе сначала то-же был планировщик, и программа
постоянно висела в оперативной памяти 90% времени ничего не
делая, а только ожидая своего времени...
Затем я от этой практики отказался - перевел программу в режим работы
из коммандной строки - создал *.bat файл,
который запускает программу по расписанию, установленному в "Scheduled Tasks"
и вот уже несколько лет работает без проблем. За это время я потратил много сил
и времени на полезную доработку - защита от СПАМА, хитрые методы сортировки,
перекодировка всей почты в единый формат, ведение почтовой базы данных и др...
глупость!
я же написал, что мне нужно сделать при чем тут сторонний софт, это не серьезно! Я не делаю почтового клиента!
Есть такой объект как таймер ожидания, с которой можно работать как с объектом Event, ф-иями WaitForSingleObject/WaitForMultipleObject.
CreateWaitableTimer/SetWaitableTimer (Win32API)
спасибо, буду рыть в этом направлении.
глупость!
я же написал, что мне нужно сделать при чем тут сторонний софт, это не серьезно! Я не делаю почтового клиента!
спасибо, буду рыть в этом направлении.
Я пытался показать где лежат грабли, но некоторые ...
Если ты не делаешь почтового КЛИЕНТА . (хотя получение почты - это задача именно клиента -если ты не в курсе :) )
Значит ты делаешь почтовый сервер.
ПОСМОТРИ на реализации готовых почтовых серверов
- ты увидишь, что для каждой тривиальной задачи создатся свой отдельный модуль, кот. запускается только когда он требуется.
ОБРАТИ ВНИМАНИЕ , что если какой- то модуль запускается на постоянную работу, то это ТОЛЬКО для прослушивания сокета и приема подключений клиентов и БОЛЬШЕ НИЧЕГО.
СМОТРИ на реализацию сервисов в Linux
- сочетание инструментов коммандной строки, графических интерфейсов к ним , планировщика "cron", и слушающих порты сервисов - например "inetd".
СМОТРИ на NortonAntivirus - он планирует свои обновления и проверку компа через "Scheduled Tasks"
Что , его разрабатывали ребята, которые не занают про
Event, CreateWaitableTimer/SetWaitableTimer
или они глупее , чем "enola" ?
Мне попадались почтовые серверы, которые имели свои жалкие потуги ведения собственного планировщика и собственной службы управления RAS Dial - подключение к интернет по телефонной линии.
Чесное слово, лучше бы они не морочили людям голову и переложили эти задачи на стандартные службы, которые действительно умеют это делать.
не хотел обидеть, сорри если что.
или они глупее, чем "enola"?
понятно, что делали знающие люди и я никак не хотел сказать, что умнее их, но поверь мне, если это Symantec, то это не значит, что я при разработке софта должен ориентироваться на какую-нибудь команду, даже если использую этой фирмы антивирус :)!
вот именно так у меня и будет реализовано, но таймер все равно нужен будет!!! У меня для этого и написан отдельный модуль :).
Я, наверно, не все правильно понял по поводу твоей реализации...
Если в самом деле есть необходимость/желание делать свой планировщик,
то тема уже исчерпана ответом " Mоngооsе "
Удачи.