![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
cemick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 416 Регистрация: 6.7.2006 Где: Санкт-Петербург Репутация: нет Всего: 6 |
Добрый день.
Читаю из COM порта в асинхронном режиме с помощью Winapi. Все хорошо, кроме одного "Но" Немного псевдо кода: While not Terminated do WaitCommEvent WaitForSingleObject GetOverlappedResult ReadFile Проблема заключается в следующем, если данные в COM порт поступят после ReadFile, НО до WaitCommEvent, я не узнаю об этом, и в WaitForSingleObject буду ждать пока еще раз не будет в COM порт выполнена посылка данных. Данные не потеряются, но получу временной лаг. В этом и вопрос, как сделать так, что бы WaitCommEvent-WaitForSingleObject сразу сообщили о том, что данные уже есть и неждали нового поступления данных. Это сообщение отредактировал(а) cemick - 28.12.2013, 10:19 |
|||
|
||||
Robus |
|
|||
Entire Профиль Группа: Участник Сообщений: 32 Регистрация: 15.12.2005 Репутация: нет Всего: 1 |
В виндовсе, по крайней мере современном, давно ушли от прерываний. Поэтому нужно создать отдельный поток в котором, в цикле, крутить чтение с порта, считывать их и класть в какой-нибудь буфер. В основном цикле проверять наличие данных в буфере в нужный и удобный для вас момент и действовать по логике работы. Если вам непосредственно нужно прерывание по приходу данных, технология та же самая, но после чтения данных вызывать процедуру из потока. Я постоянно пишу системное ПО и использую процедуру в качестве прерывания, очень удобно и надёжно. Для полного удобства я себе сделал UNIT, который параллельно работает с 256 портами, в принципе написание ПО сводится к набору простейших процедуру типа "ComOpen, ComClose, ComSend/Read", а уже UNIT сам открывает потоки, получает данные и вызывает процедуры прерывания. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |