![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
AlienEmperor |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Собственно сабж... Мне нужно, чтобы приложение при взаимодействии через COM-порт проверяло, свободно ли опрашиваемое устройство... Если да - то новая команда, если нет - ждем сколько-то мс, затем повторяем запрос... Есть ли альтернатива Sleep(ms); потому что с ним я ловлю дикие глюки (винда тормозит, хотя Application.ProcessMessages выполняю...
-------------------- Все в жизни ботва... Кроме пчел!
|
trminator |
![]()
Сообщение
#2
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
Попробуй воспользоваться Таймером Windows (из компонентов - TTimer, например).
Для TTimer : устанавливаешь TTimer.Interval := n (в миллисекундах). Каждые n миллисекунд будет выполняться обработчик TTimer.OnTime (или что-то в этом духе) -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
xds |
![]()
Сообщение
#3
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Опрос (polling) - не самый предпочтительный метод взаимодействия с внешними устройствами. Win32 API позволяет обрабатывать прерывания com-порта.
-------------------- The idiots are winning.
|
AlienEmperor |
![]()
Сообщение
#4
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Цитата Опрос (polling) - не самый предпочтительный метод взаимодействия с внешними устройствами. Win32 API позволяет обрабатывать прерывания com-порта. А поподробнее ? -------------------- Все в жизни ботва... Кроме пчел!
|
AlienEmperor |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Цитата Попробуй воспользоваться Таймером Windows (из компонентов - TTimer, например). Для TTimer : устанавливаешь TTimer.Interval := n (в миллисекундах). Каждые n миллисекунд будет выполняться обработчик TTimer.OnTime (или что-то в этом духе) Timer это конечно хорошо... Тока вот задержки у меня и по 5 мс бывают... Таймер хорош для сотен мс, а не для единиц... -------------------- Все в жизни ботва... Кроме пчел!
|
xds |
![]()
Сообщение
#6
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Наиболее простое решение - функция WaitCommEvent. Если необходим "неблокирующий" режим (e. g., в GUI-приложении), ожидание готовности и приём данных следует реализовать в отдельном потоке (нити, витке).
О таймерах: Win32 API предоставляет два таймера высокого разрешения: "Multimedia Timer" (группа функций timeXXX, доступна во всех реализациях Win32) и "Waitable Timer" (группа функций XXXWaitableTimer, доступна в Windows NT/2000/XP и Windows 98). -------------------- The idiots are winning.
|
xds |
![]()
Сообщение
#7
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Модуль для работы с Multimedia Timer.
Прикрепленные файлы ![]() -------------------- The idiots are winning.
|
AlienEmperor |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Цитата Если необходим "неблокирующий" режим (e. g., в GUI-приложении), ожидание готовности и приём данных следует реализовать в отдельном потоке (нити, витке). Т.е. если через DLL-ку сделаю, работать будет нормально ? -------------------- Все в жизни ботва... Кроме пчел!
|
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 9:50 |