Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Таймер


Автор: Garoh 22.1.2007, 20:05
Доброго всем времени суток!
Мне один человек сказал, что есть таймер, который (поправьте, если пургу несу) связан с тактовой частотой компьютера и, соответственно, более точный, чем, к примеру, таймер класса TTimer. Помогите, отпишитесь, как использовать этот таймер, т.е. как его запускать и как вообще он называется. Если такового нет, расскажите, какие есть кроме обычного TTimer, потому как я уже убедился, что последний очень неточен, на его работу влияют посторонние процессы, и поэтому порой он вообще работает через пятую точку.
Заранее спасибо!

Автор: VectorMan 22.1.2007, 20:39
Можно использовать мультимедийные таймеры с помощью функций timeSetEvent, timeKillEvent

Автор: segmentation_fault 23.1.2007, 09:50
или GetTickCount(), QueryPerformanceCounter(), clock() в ctime.h, много разных. 
Все три связаны с тактовой частотой, хотя насчет GetTickCount() 100% не уверен. 

Автор: Anikmar 23.1.2007, 09:59
Все таймеры так или иначе связаны с тактовой частотой.
И на все таймеры влияют посторонние процессы. 
Чтобы не влияли - немного поможет приоритет процесса RealTime 
Либо перехват прерывания таймера (под ДОСом много раз делал, под виндами даже не пытался ни разу, не знаю возможно ли это вообще)

Автор: Bima 23.1.2007, 10:45
Вот пример.
Там использовано 4 таймера (API): 100, 200, 300 и 500 мс
и в цикле опроса вычисляется разница по времени между таймерами 200, 300, 500  и таймером в 100 мс.

Пример очень легкий, разберешься.

Добавлено @ 10:46 
smile

Автор: ame49 24.1.2007, 16:21
Есть такая книга Borland C++ Builder, автом Шамис В.А., техника визуального программирования, в ней есть пример создания компонента точного таймера. Суть его работы заключается в том , что создается поток и запускается на выполнение с более высоким приоритетом, чем у основного процесса. Я сравнивал работу двух таймеров , мною созданного и стандартного, она ощутима.

Автор: Garoh 24.1.2007, 16:54
Спасибо всем за помощь, буду разбираться =)
З.Ы: 2 дня инета не было, так что ответил только сейчас

Автор: Alexeis 24.1.2007, 17:07
Цитата(ame49 @  24.1.2007,  16:21 Найти цитируемый пост)
в ней есть пример создания компонента точного таймера. Суть его работы заключается в том , что создается поток и запускается на выполнение с более высоким приоритетом, чем у основного процесса. Я сравнивал работу двух таймеров , мною созданного и стандартного, она ощутима. 


  Это называется мультимедийным таймером. Его точность обычно 1мс. И создается он при помощи.
Цитата(VectorMan @  22.1.2007,  20:39 Найти цитируемый пост)
мультимедийные таймеры с помощью функций timeSetEvent, timeKillEvent


Именно так он и работает, потому нет смысла изобретать велосипед.

Цитата(segmentation_fault @  23.1.2007,  09:50 Найти цитируемый пост)
QueryPerformanceCounter()

Дает самые точные тики, которые только возможно получить на писюке. У меня получалось до 0,1мкс, но точность зависит от частоты процессора.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)