Текущий архив: 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.47 MB
Время: 0.006 c