Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.22;
Скачать: CL | DM;

Вниз

Как повысить точность TTimer?   Найти похожие ветки 

 
Shadowofman ©   (2003-05-08 17:17) [0]

Всем привет!
Подскажите, пожалуйста, каким образом повысить точность компонента TTimer?
Я слышал, что есть способ, который заключается в сравнивании системного времени с последним показанием TTimer.
Если это реально, то подскажите, как это реализовать программно?

Заранее благодарен.


 
Smashich ©   (2003-05-08 17:33) [1]

GetTickCount


 
Shadowofman ©   (2003-05-08 17:42) [2]

Насколько я понял, эта процедура запрашивает системное время?


 
MBo ©   (2003-05-08 17:47) [3]

Нужно измерять промежутки или выполнять действия через точно определенные интервалы?
второе возможно только с точностью в десятки миллисекунд


 
Shadowofman ©   (2003-05-08 17:51) [4]

Мне нужно выполнять действие через точно определенные интервалы.
Точность в десять миллисекунд вполне устроит.
А как это сделать?


 
Smashich ©   (2003-05-08 17:55) [5]

GetTickCount возвращает количество миллисекунд со времени запуска компа
Retrieves the number of milliseconds since the computer was started.


 
Anatoly Podgoretsky ©   (2003-05-08 17:58) [6]

И то и другое основано основано на системном таймере, только TTimer не меет никаких показаний.


 
MBo ©   (2003-05-08 17:59) [7]

В win9X рассчитывай на 55 мс
порядка 10 - в win2K
Это связано с работой шедулера - переключением программных потоков. Система не гарантирует, что поток твоего процесса получит управление именно тогда, когда нужно.


 
Verg ©   (2003-05-08 18:11) [8]

Не. ну уже вторые сутки нас колбасит!


> Мне нужно выполнять действие через точно определенные интервалы.
> Точность в десять миллисекунд вполне устроит.
> А как это сделать?



Гарантировано - никак.
Не надо в контексте Win32 даже надеятся на "время".

Для "пытающихся прыгнуть выше головы", special for NT/2k:

program LockUp;

{$APPTYPE CONSOLE}

uses
windows;
function LockThread(param:pointer):DWORD; stdcall;
begin
while(true) do;
end;

procedure Lock;
var dwTid : DWORD;
hThread : THANDLE;
begin
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
while(true) do
begin
hThread := CreateThread(nil, 0,@LockThread, nil, 0, dwTid);
SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL);
end;
end;

begin
Lock;
end.


Если вы ее запустите, все "улучшения точности TTimer" полетят в тар-тарары...
Почему - Джефри Рихтер об этом уже рассказывал...
Пора бы в FAQ, что Win32 - система не раального времени


 
Плохой человек   (2003-05-08 18:28) [9]

Проще взять другой, нестандартный таймер, большинство из которых являются оболочкой для потока, и не мучаться. Хотя, кому то нравится всё делать ручками - я не против.


 
Shadowofman ©   (2003-05-08 18:35) [10]

А какой другой нестандартный таймер ты можешь посоветовать?


 
MBo ©   (2003-05-08 18:35) [11]

>Плохой человек
>Проще взять другой, нестандартный таймер
И что? :))


 
Anatoly Podgoretsky ©   (2003-05-08 18:59) [12]

Мультимедия таймер, так около одной миллисекунды + что виндоус позволит.


 
Erik Ivanov   (2003-05-09 12:43) [13]

Посмотри статью в Королевстве "Таймер который неподведет"
http://www.delphikingdom.ru/mastering/timer.htm
Мне понравилось, к томуже там есть Cron!!! ОЧЕНЬ ПРИЯТНАЯ ВЕЩЬ.
Задаеш когда тебе надо чтобы скаботал таймер до дня недели + неограниченое количество этих таймеров. Очень качественно сделано. У меня есть последнея версия, там автор пофиксил срабадывание на день недели.



Страницы: 1 вся ветка

Текущий архив: 2003.05.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
6-70417
BGV
2003-03-25 11:24
2003.05.22
NMFTP.FTPDirectoryList


1-70229
Kardash
2003-05-10 12:10
2003.05.22
Как извлечь месяц из даты ???


14-70477
Дмитрий К.К.
2003-05-03 13:58
2003.05.22
Именинники 3 мая


1-70225
Rocker
2003-05-08 08:46
2003.05.22
Узнать текущее время


3-70151
Igor Mish
2003-05-01 20:44
2003.05.22
Что такое CalcOp1 в Rave ?