Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.17;
Скачать: CL | DM;

Вниз

Реализация механизма расписания   Найти похожие ветки 

 
DDDeN   (2007-11-08 13:18) [0]

Доброго времени суток! Необходимо реализовать механизм отслеживания определенных событий и их выполнение. Например, пользователь может создать событие, которое должно выполняться каждую среду в 18-00. К событию можно привязать определенное действие программы. Критериев выполнения может быть много, как одноразовое, каждодневное, в определенные дни, часы, минуты, секунды, так и выбранные дни и часы пользователем.


 
clickmaker ©   (2007-11-08 13:27) [1]

кроме как TTimer / SetTimer человечество ничего лучшего пока не изобрело.


 
DDDeN   (2007-11-08 14:01) [2]

Я вот тоже только такой метод знаю, это на таймер просматривать все события, и если они совпадают то выполнять определенное действие. Но если в списке заданий около 1000, думаю будет большая погрешность... Пока будет пробегать по списку уже некоторое событие может "пролететь".


 
Anatoly Podgoretsky ©   (2007-11-08 14:07) [3]

> clickmaker  (08.11.2007 13:27:01)  [1]

А системный планировщик, или штатный или программно, через АПИ


 
Dib@zol ©   (2007-11-08 14:08) [4]

А как же WaitForSingleObject/CreateWaitableTimer и иже с ними?


 
DDDeN   (2007-11-08 14:08) [5]

> Anatoly Podgoretsky ©   (08.11.07 14:07) [3]

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


 
DDDeN   (2007-11-08 14:09) [6]

> Dib@zol ©   (08.11.07 14:08) [4]

А можно немного подробнее?


 
Reindeer Moss Eater ©   (2007-11-08 14:10) [7]

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

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


 
DDDeN   (2007-11-08 14:14) [8]


> Reindeer Moss Eater ©   (08.11.07 14:10) [7]

Хорошо, как один из вариантов. Теперь так, пусть возможно 200-300 событий. Их все как-то необходимо будет идентифицировать через командную строку.


 
Сергей М. ©   (2007-11-08 14:15) [9]


> Их все как-то необходимо будет идентифицировать через командную
> строку


У тебя проблемы с разбором ком.строки, переданной твоему приложению ?


 
Dib@zol ©   (2007-11-08 14:16) [10]

> [8] DDDeN   (08.11.07 14:14)

Их все надо разделить терминирующими символами, например, | или ` и всех делов.


 
DDDeN   (2007-11-08 14:21) [11]


> Сергей М. ©   (08.11.07 14:15) [9]

В принципе нет. Достаточно забить в статический массив все события и обходить их все в цикле.


> Dib@zol ©   (08.11.07 14:16) [10]

Это если несколько событий должно быть выполнено одновременно.

Вообщем, имеем всего два варианта. Если исключить использование АПИ Шедулера, то это либо реализовывать самому при помощи Таймера, либо юзать командную строку и Шедулер.

А если на компе нет Шедулера? :)


 
Ega23 ©   (2007-11-08 14:21) [12]


> Пока будет пробегать по списку уже некоторое событие может
> "пролететь".


А ты не сравнивай время задания с текущим временем на "равно". Сравнивай на "меньше-равно".
И тогда никто не "пролетит".


 
адепт кайфа   (2007-11-08 14:24) [13]

Их все как-то необходимо будет идентифицировать через командную строку.

И без командной строки то же самое


 
Сергей М. ©   (2007-11-08 14:24) [14]


> DDDeN   (08.11.07 14:21) [11]
> В принципе нет


ну так дерзай !)


 
DDDeN   (2007-11-08 14:25) [15]


> Ega23 ©   (08.11.07 14:21) [12]

Согласен. Хотя придется добавить в структуру события флаг о том, что оно выполнилось. И соответственно отслеживать завершение процесса, который был порожден событием и снова сбрасывать флаг. Типо наподобие транзакций.


 
Сергей М. ©   (2007-11-08 14:28) [16]


> в структуру события флаг о том, что оно выполнилось


Событие не может "выполниться".
Оно может произойти или возникнуть.


 
Reindeer Moss Eater ©   (2007-11-08 14:28) [17]

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


 
DDDeN   (2007-11-08 14:30) [18]


> Reindeer Moss Eater ©   (08.11.07 14:28) [17]

Эвенты нельзя удалять. Они же могут повторится скажем на следующий день в это же время. Или через Х часов.


 
Reindeer Moss Eater ©   (2007-11-08 14:32) [19]

Тебе никто про удаление и не говорил.
Но это глупость - тупо проверять раз в секунду в течение всех суток не наступило ли время евента, если он запланирован на завтра


 
Сергей М. ©   (2007-11-08 14:33) [20]


> Эвенты нельзя удалять


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


 
Reindeer Moss Eater ©   (2007-11-08 14:34) [21]

Вот лично ты когда просыпаешься  1 января и смотришь список дел на день, то листаешь календарь до 31 декабря, или нет?


 
clickmaker ©   (2007-11-08 14:40) [22]


> [3] Anatoly Podgoretsky ©   (08.11.07 14:07)
> > clickmaker  (08.11.2007 13:27:01)  [1]
>
> А системный планировщик, или штатный или программно, через
> АПИ

а он что, какие-то секретные разработки НАСА использует? Тот же SetTimer()...


 
DDDeN   (2007-11-08 14:46) [23]


> Reindeer Moss Eater ©   (08.11.07 14:34) [21]

Это наверно и есть индексирование. Смотрю только эвенты на день. Ну и мельком пробегаю по всему календарю, мол, вспомнить когда у кого ДР и прочее.


 
Anatoly Podgoretsky ©   (2007-11-08 15:22) [24]


> а он что, какие-то секретные разработки НАСА использует?
>  Тот же SetTimer()...

Дело то не в таймере, а в поддержке операций планирования, в которых автор очень сильно плавает, не понимает даже элементарных основ. Так пусть пользуется тем, что уже есть, а есть очень мощное АПИ.
А SetTimer не составляет и сотых долей необходимого.


 
Anatoly Podgoretsky ©   (2007-11-08 15:23) [25]

По поводу индексирования, никакого индексирование и в принципе не требуется, нужна обычная сортированая очередь.


 
DDDeN   (2007-11-08 15:25) [26]

Спасибо всем! Буду разбираться!



Страницы: 1 вся ветка

Текущий архив: 2008.02.17;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
15-1200302452
DVM
2008-01-14 12:20
2008.02.17
Смешение цветов, быстрее можно ли?


3-1191567149
абв
2007-10-05 10:52
2008.02.17
IBBackUpService


15-1200315233
asdf
2008-01-14 15:53
2008.02.17
разбор строки


2-1200997632
Gasper
2008-01-22 13:27
2008.02.17
Киррилица


2-1201261361
Res
2008-01-25 14:42
2008.02.17
Округление