Главная страница
    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.47 MB
Время: 0.006 c
14-70514
Hacker.
2003-05-03 08:29
2003.05.22
Сохранение иконок.


1-70393
MAX22
2003-05-10 22:14
2003.05.22
Код для создаваемого объекта


1-70269
zom
2003-05-07 14:04
2003.05.22
Как нарисовать окно, которое всегда на переднем плане?


1-70275
Phantom
2003-05-08 10:41
2003.05.22
как определить время создания файла?


14-70446
Mikelson
2003-04-29 14:02
2003.05.22
Библиотека контейнеров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский