![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реализация механизма расписания [D5, D6, Win2k, WinXP]
DDDeN © (2007-11-08 13:18:00)Доброго времени суток! Необходимо реализовать механизм отслеживания определенных событий и их выполнение. Например, пользователь может создать событие, которое должно выполняться каждую среду в 18-00. К событию можно привязать определенное действие программы. Критериев выполнения может быть много, как одноразовое, каждодневное, в определенные дни, часы, минуты, секунды, так и выбранные дни и часы пользователем.
DDDeN (2007-11-08 15:25:00) [1]Спасибо всем! Буду разбираться!
Anatoly Podgoretsky (2007-11-08 15:23:00) [2]По поводу индексирования, никакого индексирование и в принципе не требуется, нужна обычная сортированая очередь.
Anatoly Podgoretsky (2007-11-08 15:22:00) [3]
> а он что, какие-то секретные разработки НАСА использует?
> Тот же SetTimer()...
Дело то не в таймере, а в поддержке операций планирования, в которых автор очень сильно плавает, не понимает даже элементарных основ. Так пусть пользуется тем, что уже есть, а есть очень мощное АПИ.
А SetTimer не составляет и сотых долей необходимого.
DDDeN (2007-11-08 14:46:00) [4]
> Reindeer Moss Eater © (08.11.07 14:34) [21]
Это наверно и есть индексирование. Смотрю только эвенты на день. Ну и мельком пробегаю по всему календарю, мол, вспомнить когда у кого ДР и прочее.
clickmaker (2007-11-08 14:40:00) [5]
> [3] Anatoly Podgoretsky © (08.11.07 14:07)
> > clickmaker (08.11.2007 13:27:01) [1]
>
> А системный планировщик, или штатный или программно, через
> АПИ
а он что, какие-то секретные разработки НАСА использует? Тот же SetTimer()...
Reindeer Moss Eater (2007-11-08 14:34:00) [6]Вот лично ты когда просыпаешься 1 января и смотришь список дел на день, то листаешь календарь до 31 декабря, или нет?
Сергей М. (2007-11-08 14:33:00) [7]
> Эвенты нельзя удалять
зато их можно индексировать, чтобы перелопачивать только те, что реально ожидаются в означенный период времени.
Reindeer Moss Eater (2007-11-08 14:32:00) [8]Тебе никто про удаление и не говорил.
Но это глупость - тупо проверять раз в секунду в течение всех суток не наступило ли время евента, если он запланирован на завтра
DDDeN (2007-11-08 14:30:00) [9]
> Reindeer Moss Eater © (08.11.07 14:28) [17]
Эвенты нельзя удалять. Они же могут повторится скажем на следующий день в это же время. Или через Х часов.
Reindeer Moss Eater (2007-11-08 14:28:00) [10]первый раз прочекав список из тысячи эвентов, можно сразу почистить список, отсеяв те, которые случатся скажем через день или позднее.
Сергей М. (2007-11-08 14:28:00) [11]
> в структуру события флаг о том, что оно выполнилось
Событие не может "выполниться".
Оно может произойтиили возникнуть.
DDDeN (2007-11-08 14:25:00) [12]
> Ega23 © (08.11.07 14:21) [12]
Согласен. Хотя придется добавить в структуру события флаг о том, что оно выполнилось. И соответственно отслеживать завершение процесса, который был порожден событием и снова сбрасывать флаг. Типо наподобие транзакций.
Сергей М. (2007-11-08 14:24:00) [13]
> DDDeN (08.11.07 14:21) [11]
> В принципе нет
ну так дерзай !)
адепт кайфа (2007-11-08 14:24:00) [14]Их все как-то необходимо будет идентифицировать через командную строку.
И без командной строки то же самое
Ega23 (2007-11-08 14:21:00) [15]
> Пока будет пробегать по списку уже некоторое событие может
> "пролететь".
А ты не сравнивай время задания с текущим временем на "равно". Сравнивай на "меньше-равно".
И тогда никто не "пролетит".
DDDeN (2007-11-08 14:21:00) [16]
> Сергей М. © (08.11.07 14:15) [9]
В принципе нет. Достаточно забить в статический массив все события и обходить их все в цикле.
> Dib@zol © (08.11.07 14:16) [10]
Это если несколько событий должно быть выполнено одновременно.
Вообщем, имеем всего два варианта. Если исключить использование АПИ Шедулера, то это либо реализовывать самому при помощи Таймера, либо юзать командную строку и Шедулер.
А если на компе нет Шедулера? :)
Dib@zol (2007-11-08 14:16:00) [17]> [8] DDDeN (08.11.07 14:14)
Их все надо разделить терминирующими символами, например, | или ` и всех делов.
Сергей М. (2007-11-08 14:15:00) [18]
> Их все как-то необходимо будет идентифицировать через командную
> строку
У тебя проблемы с разбором ком.строки, переданной твоему приложению ?
DDDeN (2007-11-08 14:14:00) [19]
> Reindeer Moss Eater © (08.11.07 14:10) [7]
Хорошо, как один из вариантов. Теперь так, пусть возможно 200-300 событий. Их все как-то необходимо будет идентифицировать через командную строку.
Reindeer Moss Eater (2007-11-08 14:10:00) [20]А если необходимо взаимодействие с моей программой? Например, выгрузка таблицы во внешний текстовый файл?
Штатный шедулер + твоя программа + параметры командной строки