Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Вниззапуск процедуры в определенное время Найти похожие ветки
← →
Phoenix9000 © (2005-06-02 13:15) [0]Доброго времени суток, уважаемые мастера.
Есть задача.
При запуске программы она должна проверять системное время, далее запускать таймер и в определенное системное время запустить процедуру на выполнение.
Например:
программа запущена в 12.00 . Далее она должна просчитать, сколько ей осталось до запуска процедуры и запустить ее в 15.00
Как можно реализовать данный алгоритм?
Заранее спасибо за любые примеры и ответы.
← →
Digitman © (2005-06-02 13:16) [1]
> Как можно реализовать данный алгоритм?
тоько не говори, что тебе вообще ничего не понятно
← →
Phoenix9000 © (2005-06-02 13:22) [2]Да проблемма в общем то в следующем:
я могу присвоить переменной значение системного времени в момент запуска программы. Но значение переменной типа Date. А в таймере значение свойства Interval - типа cardinal.
Как осуществить перевод остатка времени после запуска программы до необходимого для старта процедуры т.е. как вычислить эту разницу во времени и перевести ее в милисекунды?
← →
Jeer © (2005-06-02 13:26) [3]По таймеру сравнивай системное время с заданным.
← →
Ega23 © (2005-06-02 13:27) [4]Возьми не date а GetTickCount - это, вроде, тоже Cardinal...
← →
Плохиш © (2005-06-02 13:31) [5]>Phoenix9000 © (02.06.05 13:22) [2]
У тебя проблема с расчётом интервала между двумя звачениями времени в миллисекундах? или в присвоении полученного значения таймеру?
← →
Phoenix9000 © (2005-06-02 13:31) [6]To jeer
постоянное сравнение системного времени с заданным - вариант непреемлеммый.
To Ega23
А как его завязать на сравнение системного времени ?
Как высчитать разницу между заданным и системным временем?
Если возможно, небольшой пример.
← →
Phoenix9000 © (2005-06-02 13:33) [7]to Плохиш
С рассчетом интервала в милисекундах.
← →
Digitman © (2005-06-02 13:34) [8]
> постоянное сравнение системного времени с заданным - вариант
> непреемлеммый
чтой-то вдруг ?
← →
злобная танька (2005-06-02 13:35) [9]timer1.interval := 3*60*60*1000;
через 3 часа долбанёт!
← →
Плохиш © (2005-06-02 13:35) [10]>Phoenix9000 © (02.06.05 13:33) [7]
Для халявщиков Борланд придумал соответствующую функцию, которая описана в справочной системе Delphi.
← →
Digitman © (2005-06-02 13:39) [11]
> [9]
уж не "черные" ли "вдовы" у нас завелись тут ?)
← →
Phoenix9000 © (2005-06-02 13:41) [12]To Плохиш
Веришь, нет, не работает справка вообще на моей машине.
Delphi2005, дистрибутив такой, что справки не было. Так что увы, посмотреть не могу.
Примерчик бы, а ... :-)
← →
Jeer © (2005-06-02 13:47) [13]Phoenix9000 © (02.06.05 13:31) [6]
Объясни почему
Еще вариант - WaitableTimer
>запустить ее в 15.00
не удасться, будет погрешность из-за квантованности времени.
← →
Antonn © (2005-06-02 13:48) [14]
> программа запущена в 12.00 . Далее она должна
> просчитать, сколько ей осталось до запуска процедуры и
> запустить ее в 15.00
сижу, пытаюсь сообразить, чего нужно-то...
1. программа запускается, и определяет время срабатывания через определенный интервал.
2. программа запускается и определяет время до запуска, установленого заранее.
← →
Digitman © (2005-06-02 13:52) [15]
> сижу, пытаюсь сообразить, чего нужно-то...
да хз что ему нужно)
то ли чтобы долбануло ровно в H часов M минут S секунд D дня (или не долбануло вообще, если уже проехали), то ли чтобы долбануло через X времени после старта процесса
это же страшно сложно - связать два слова в предложение, чтобы народ вокруг сразу понял, об абсолютном или об относительном времени идет речь)
← →
Phoenix9000 © (2005-06-02 13:54) [16]To Jeer
Проверки через определенные промежутки времени смысла не имеют. Допустим программу запустили в 13.41 . Запуск процедуры должен быть произведен в 15.00 . Проверка определит, что заданное время не соответствует системному. А дальше что?
Проще один раз проверить системное и заданное время, определить разницу и запустить таймер на эту разницу.
← →
Phoenix9000 © (2005-06-02 13:57) [17]To Antonn и To Digitman
Поясняю:
Независимо от времени запуска программы (любое время суток) необходим запуск определенной процедуры программы в заданное время, например в 15.00.
← →
Плохиш © (2005-06-02 13:57) [18]MilliSecondsBetween
Всё закрывайте ветку, нафик :-)
← →
Jeer © (2005-06-02 14:00) [19]Phoenix9000 © (02.06.05 13:57) [17]
С какой точностью ?
Jeer © (02.06.05 13:26) [3] - задача решается.
← →
Phoenix9000 © (2005-06-02 14:01) [20]To Плохиш
Пасибо, буду пробовать :-)
Извините, если напряг :-)
← →
Digitman © (2005-06-02 14:01) [21]
> Проверка определит, что заданное время не соответствует
> системному
> А дальше что?
а дальше - тереби админа, чтобы он наконец-то реализовал таки периодическую синхронизацию времени на сетевых хостах с атомными часами на спец.хостах в интерсети
тогда сист.время будет соответствовать реальному времени.
и уж ежели сейчас 5:00AM, то "долбануть" в 4:00AM сегодня уже никак не посчастливится) ... только - завтра)
← →
Jeer © (2005-06-02 14:04) [22]Плохиш © (02.06.05 13:57) [18]
Да нет, парень чего-то серьезно не догоняет.
Вот и пробуем.:)
← →
Antonn © (2005-06-02 14:18) [23]procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (formatdatetime("hh:nn:ss",now)=formatdatetime("hh:nn:ss", DateTimePicker1.Time))and not(_b) then begin
_b:=true;
//ура, она сработала...
end else
if not(formatdatetime("hh:nn:ss",now)=formatdatetime("hh:nn:ss", DateTimePicker1.Time)) then _b:=false;
end;
← →
Antonn © (2005-06-02 14:20) [24]приятная мелочь к [23]
var _b:boolean;
← →
Digitman © (2005-06-02 14:25) [25]
> Antonn © (02.06.05 14:18) [23]
гениально !
← →
Antonn © (2005-06-02 14:30) [26]Digitman © (02.06.05 14:25) [25]
я тоже так думаю:)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c