ОБСУЖДЕНИЕ

Мультимедийный таймер

2 ответов 8,8 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
Привет всем. Вопрос собственно не совсем про компоненты, просто не смог подобрать более подходящего раздела. На данный момент я пока знаю три таймера: TTimer - Delphi, системный таймер и мультимедийный таймер, через API Windows. Вот небольшая прога для тестирования.
Посмотреть вложение ProbaTime.zip
Вопрос собственно вот в чем: Мне нужно выполнить некоторую процедуру с периодичностью в 1 милисекунду, из тестовой программы видно, что делфийский и системный таймеры отстают от реального времени уже при значении 10 милисекунд, а таймер мультимедиа вроде бы тикает более менее точно даже при значении 1 милисекунда, но довольно часто вылетает такая и подобные ей ошибки
Посмотреть вложение irror.zip
Меня интересует почему выскакивают ошибки и как от этого избавится?
 
Я программу не смогу поставить, т.к. на работе нет Delphi, но таймер хороший посоветывать могу.
есть "DelphiX" компоненты для создания игр под DirectX, но самое хорошее там DXTimer и DXInput - попробуй!
 
chingiz, проблема заключается в том, что mmTimerProc вызвается не из основного потока, а из потока таймера, асинхронно. Поэтому иногда появляются артефакты в виде чисел, нарисованных где попало на экране, и в виде access violation'ов.
Вообще, произвольно появляющийся глюк обычно указывает на проблемы синхронизации потоков.
Резюме: (частное) не работайте с элементами интерфейса в mmTimerProc; и (общее) синхронизируйте ваши потоки.