Необходимо получать затержки порядка 10 микросекунд (упрвление шаговым двигателем). Задачу решил так: при запуске программы создаю и запускаю мультимедийный таймер, запускаю цикл записи в порт. По сработке таймера определяю количество выполненных записей, делю и затем использую полученный результат в отдельном потоке управления портом. Особо высокая точность не нужна, поэтому, в принципе, всё устраивает. Однако, компьютер ниже 4-х ядерного периодически вызывает кратковременные "подвисания" потока, что вызывает заметные на глаз приостановки шагового двигателя и соответственно повышенную вибрацию. Пробовал менять преоритеты, но эффект тот же самый.
Если использовать тики, то, возможно, удалось бы решить проблему. Но если их постоянно отслеживать, то будет то же самое. Необходимо создать что-то типа таймера, который срабатывал бы по прошествию какого-то количества тиков. На http://wiki.freepascal.org/Components_and_Code_examples/ru есть компонент EpikTimer - точный таймер, написанный специально для Lazarus., который, судя по описанию, поддерживает микросекундные интервалы.
- Nanosecond resolution is supported on Intel Pentium versions with a Timestamp Counter.
- Microsecond system clock is the default timebase.
Можно ли при помощи этого компонента получить требуемые задержки? В примерах приводят только секундные задержки, а процедуру типм SleepUS или Timer.Interval=... (микросекунд), там не увидел.
Добавлено спустя 3 минуты 8 секунд:
Самое обидное то, что я у меня есть аналогичная зарубежная программа, которая выдаёт интервалы даже меньше 10 мкс и без подвисаний работает на Pentium-1.