![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как написать таймер не зависящий от системного времени [D7]
Zapekank0 © (2005-02-26 10:41:00)Необходимо что бы (допустим на Label.Caption), показывалось оставшееся время (т.е. шел обратный отсчет, где начальное время равно 1 час), при чем оно не зависило от системного времени. Т.е. если перевести время на системных часах количество оставшегося времени не менялось. Подскажите как это можно реализовать...
ICQ#287390755
Anatoly Podgoretsky (2005-03-04 07:46:00) [1]Defunct © (04.03.05 05:23) [13]
А смысл? При наличии простого решения - привязка показаний к системным тика, а таймер только для того, что бы получать прерывания с относительной точностью.
Defunct (2005-03-04 05:23:00) [2]Anatoly Podgoretsky © (27.02.05 12:35) [12]
Да вы правы, (проверил). TTimer чувствителен к приостанову основного потока.. Как следствие громаднейшая погрешность.
как вариант спящий поток c tpTimeCritical (погрешность меньше ~0.001 сек в час):
Anatoly Podgoretsky (2005-02-27 12:35:00) [3]Defunct © (27.02.05 11:44) [10]
Речь идет не о микросекундах, кстати это очень частый вопрос, почему у меня показания по таймеру сильно отстают от системного времени.
Реализация отсчет по GetTickCount настолько тривиальна, что даже говорить не о чем. Заботой таймера будет только обеспечение срабатывания для индикации этого времени.
Zapekank0 (2005-02-27 12:14:00) [4]procedure Ttest_form.Timer_TestTimer(Sender: TObject);
begin
//подсчет оставшего времени
Test_Time:=inttostr(59-minute)+':'+IntToStr(59-sek);
label5.Caption:=Test_Time;
sek:=sek+1;
if sek=60 then
begin
sek:=0;
minute:=minute+1;
end;
if minute=60 then
begin
minute:=0;
hour:=hour+1;
end;
if hour=1 then
begin
Timer_Test.Enabled:=false;
Test_Time:=inttostr(59-minute)+':'+IntToStr(59-sek);
Label5.Caption:=Test_Time;
end;
end;
Defunct (2005-02-27 11:44:00) [5]Anatoly Podgoretsky © (27.02.05 10:38) [9]
Когда речь идет об задержке в один час, то кому нужна стабильность? Ну будет один отсчет на пару микросекунд больше, второй меньше на столько же. В часу 3600 секунд так что результат будет более менее точный.
Anatoly Podgoretsky (2005-02-27 10:38:00) [6]Юрий Зотов © (27.02.05 06:16) [8]
Этот конечно нужен для организации цикла, но он же не дает никакой информации о времени. Расчитывать на стабильность интервалов, в качестве отсчета тоже не приходится.
Поэтому цикл по TTimer, но независимый отсчет по GetTickCount
Юрий Зотов (2005-02-27 06:16:00) [7]> Zapekank0 (26.02.05 10:41)
А чем не устраивает самый обыкновенный TTimer?
Mim2 (2005-02-27 03:18:00) [8]Еще неплохобы все зделать (именно Зделать) все трехмерно :) чтоб все возможности видеокарты использовались :).
webpauk (2005-02-26 14:20:00) [9]А как насчет SetTimer
Anatoly Podgoretsky (2005-02-26 13:34:00) [10]Давай еще и SQL сервер приспособим.
Eraser (2005-02-26 13:21:00) [11]Zapekank0
вариант с будильником является единственным верным
А чем GetTickCount не устраивает???
Ещё один вариант- синхронизировать через инет. С помощью Indy делается элементарно.
Zapekank0 (2005-02-26 11:22:00) [12]Пасибо, вариант с будильником является единственным верным ;)
Knight (2005-02-26 11:05:00) [13]Поставь на монитор будильник... тот точно от компа зависеть не будет... ему даже на его зависания будет наплювать :)
Anatoly Podgoretsky (2005-02-26 10:45:00) [14]Опирайся на GetTickCount оно не зависит от смены времени.