AlienEmperor
5.04.2005 14:45
Собственно сабж... Мне нужно, чтобы приложение при взаимодействии через COM-порт проверяло, свободно ли опрашиваемое устройство... Если да - то новая команда, если нет - ждем сколько-то мс, затем повторяем запрос... Есть ли альтернатива Sleep(ms); потому что с ним я ловлю дикие глюки (винда тормозит, хотя Application.ProcessMessages выполняю...
trminator
6.04.2005 20:46
Попробуй воспользоваться Таймером Windows (из компонентов - TTimer, например).
Для TTimer : устанавливаешь TTimer.Interval := n (в миллисекундах). Каждые n миллисекунд будет выполняться обработчик TTimer.OnTime (или что-то в этом духе)
Опрос (polling) - не самый предпочтительный метод взаимодействия с внешними устройствами. Win32 API позволяет обрабатывать прерывания com-порта.
AlienEmperor
11.04.2005 10:22
Цитата
Опрос (polling) - не самый предпочтительный метод взаимодействия с внешними устройствами. Win32 API позволяет обрабатывать прерывания com-порта.
А поподробнее ?
AlienEmperor
11.04.2005 10:23
Цитата
Попробуй воспользоваться Таймером Windows (из компонентов - TTimer, например).
Для TTimer : устанавливаешь TTimer.Interval := n (в миллисекундах). Каждые n миллисекунд будет выполняться обработчик TTimer.OnTime (или что-то в этом духе)
Timer это конечно хорошо... Тока вот задержки у меня и по 5 мс бывают... Таймер хорош для сотен мс, а не для единиц...
Наиболее простое решение - функция WaitCommEvent. Если необходим "неблокирующий" режим (e. g., в GUI-приложении), ожидание готовности и приём данных следует реализовать в отдельном потоке (нити, витке).
О таймерах: Win32 API предоставляет два таймера высокого разрешения: "Multimedia Timer" (группа функций timeXXX, доступна во всех реализациях Win32) и "Waitable Timer" (группа функций XXXWaitableTimer, доступна в Windows NT/2000/XP и Windows 98).
Модуль для работы с Multimedia Timer.
AlienEmperor
12.04.2005 10:47
Цитата
Если необходим "неблокирующий" режим (e. g., в GUI-приложении), ожидание готовности и приём данных следует реализовать в отдельном потоке (нити, витке).
Т.е. если через DLL-ку сделаю, работать будет нормально ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.