Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как написать таймер не зависящий от системного времени [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 оно не зависит от смены времени.


Наверх

Титульная страница Поиск, карта сайта Написать письмо