Форум: "Основная";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
ВнизРеализация механизма расписания Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.048 c