Помощь - Поиск - Пользователи - Календарь
Полная версия: Альтернатива Delay в Delphi
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
AlienEmperor
Собственно сабж... Мне нужно, чтобы приложение при взаимодействии через COM-порт проверяло, свободно ли опрашиваемое устройство... Если да - то новая команда, если нет - ждем сколько-то мс, затем повторяем запрос... Есть ли альтернатива Sleep(ms); потому что с ним я ловлю дикие глюки (винда тормозит, хотя Application.ProcessMessages выполняю...
trminator
Попробуй воспользоваться Таймером Windows (из компонентов - TTimer, например).

Для TTimer : устанавливаешь TTimer.Interval := n (в миллисекундах). Каждые n миллисекунд будет выполняться обработчик TTimer.OnTime (или что-то в этом духе)
xds
Опрос (polling) - не самый предпочтительный метод взаимодействия с внешними устройствами. Win32 API позволяет обрабатывать прерывания com-порта.
AlienEmperor
Цитата
Опрос (polling) - не самый предпочтительный метод взаимодействия с внешними устройствами. Win32 API позволяет обрабатывать прерывания com-порта.


А поподробнее ?
AlienEmperor
Цитата
Попробуй воспользоваться Таймером Windows (из компонентов - TTimer, например).

Для TTimer : устанавливаешь TTimer.Interval := n (в миллисекундах). Каждые n миллисекунд будет выполняться обработчик TTimer.OnTime (или что-то в этом духе)



Timer это конечно хорошо... Тока вот задержки у меня и по 5 мс бывают... Таймер хорош для сотен мс, а не для единиц...
xds
Наиболее простое решение - функция WaitCommEvent. Если необходим "неблокирующий" режим (e. g., в GUI-приложении), ожидание готовности и приём данных следует реализовать в отдельном потоке (нити, витке).

О таймерах: Win32 API предоставляет два таймера высокого разрешения: "Multimedia Timer" (группа функций timeXXX, доступна во всех реализациях Win32) и "Waitable Timer" (группа функций XXXWaitableTimer, доступна в Windows NT/2000/XP и Windows 98).
xds
Модуль для работы с Multimedia Timer.
AlienEmperor
Цитата
Если необходим "неблокирующий" режим (e. g., в GUI-приложении), ожидание готовности и приём данных следует реализовать в отдельном потоке (нити, витке).


Т.е. если через DLL-ку сделаю, работать будет нормально ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.