Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизКак написать таймер не зависящий от системного времени Найти похожие ветки
← →
Zapekank0 (2005-02-26 10:41) [0]Необходимо что бы (допустим на Label.Caption), показывалось оставшееся время (т.е. шел обратный отсчет, где начальное время равно 1 час), при чем оно не зависило от системного времени. Т.е. если перевести время на системных часах количество оставшегося времени не менялось. Подскажите как это можно реализовать...
ICQ#287390755
← →
Anatoly Podgoretsky © (2005-02-26 10:45) [1]Опирайся на GetTickCount оно не зависит от смены времени.
← →
Knight © (2005-02-26 11:05) [2]Поставь на монитор будильник... тот точно от компа зависеть не будет... ему даже на его зависания будет наплювать :)
← →
Zapekank0 (2005-02-26 11:22) [3]Пасибо, вариант с будильником является единственным верным ;)
← →
Eraser © (2005-02-26 13:21) [4]Zapekank0
вариант с будильником является единственным верным
А чем GetTickCount не устраивает???
Ещё один вариант- синхронизировать через инет. С помощью Indy делается элементарно.
← →
Anatoly Podgoretsky © (2005-02-26 13:34) [5]Давай еще и SQL сервер приспособим.
← →
webpauk (2005-02-26 14:20) [6]А как насчет SetTimer
← →
Mim2 (2005-02-27 03:18) [7]Еще неплохобы все зделать (именно Зделать) все трехмерно :) чтоб все возможности видеокарты использовались :).
← →
Юрий Зотов © (2005-02-27 06:16) [8]> Zapekank0 (26.02.05 10:41)
А чем не устраивает самый обыкновенный TTimer?
← →
Anatoly Podgoretsky © (2005-02-27 10:38) [9]Юрий Зотов © (27.02.05 06:16) [8]
Этот конечно нужен для организации цикла, но он же не дает никакой информации о времени. Расчитывать на стабильность интервалов, в качестве отсчета тоже не приходится.
Поэтому цикл по TTimer, но независимый отсчет по GetTickCount
← →
Defunct © (2005-02-27 11:44) [10]Anatoly Podgoretsky © (27.02.05 10:38) [9]
Когда речь идет об задержке в один час, то кому нужна стабильность? Ну будет один отсчет на пару микросекунд больше, второй меньше на столько же. В часу 3600 секунд так что результат будет более менее точный.
← →
Zapekank0 (2005-02-27 12:14) [11]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;
← →
Anatoly Podgoretsky © (2005-02-27 12:35) [12]Defunct © (27.02.05 11:44) [10]
Речь идет не о микросекундах, кстати это очень частый вопрос, почему у меня показания по таймеру сильно отстают от системного времени.
Реализация отсчет по GetTickCount настолько тривиальна, что даже говорить не о чем. Заботой таймера будет только обеспечение срабатывания для индикации этого времени.
← →
Defunct © (2005-03-04 05:23) [13]Anatoly Podgoretsky © (27.02.05 12:35) [12]
Да вы правы, (проверил). TTimer чувствителен к приостанову основного потока.. Как следствие громаднейшая погрешность.
как вариант спящий поток c tpTimeCritical (погрешность меньше ~0.001 сек в час):
← →
Anatoly Podgoretsky © (2005-03-04 07:46) [14]Defunct © (04.03.05 05:23) [13]
А смысл? При наличии простого решения - привязка показаний к системным тика, а таймер только для того, что бы получать прерывания с относительной точностью.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c