Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реализация механизма расписания [D5, D6, Win2k, WinXP]


Страницы:   1 2

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]

А если необходимо взаимодействие с моей программой? Например, выгрузка таблицы во внешний текстовый файл?

Штатный шедулер + твоя программа + параметры командной строки


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо