Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 13:55   #1
osandr
 
Регистрация: 01.06.2010
Сообщений: 4
По умолчанию Асинхронная обработка принятых данных от порта

Пишу программу на Delphi 7 для управления устройством на микроконтроллере. Устройство подключается к COM-порту. Устройство работает по следующему принципу: программа посылает один или несколько байт, которые устройство расценивает как команды. В зависимости от команды оно посылает соответствующий ответ в виде одного или нескольких байт.
В программе есть два потока. Один – для чтения, второй – для записи в порт. Поток чтения постоянно запущен. Как только приходят байты, происходит их считывание в буфер, представляющий собой TList. Поток записи запускается по необходимости. Мне нужно контролировать принятые байты, чтобы знать, как устройство отреагировало на команды.
Так вот вопрос следующий: как мне заставить программу подождать, пока в списке TList появится первый элемент, т.е. придет хотя бы один байт? В микроконтроллере это реализуется просто. Запускается цикл while, в котором ожидается наступление какого-то события, например установки какого-либо флага. Если использовать такой метод в моей программе, то она будет зависать. Как организовать ожидание прихода байта (или нескольких байт), без зависания программы?
osandr вне форума Ответить с цитированием
Старый 01.06.2010, 14:31   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

непонятна проблема... ставьте размер буфера на 1 или несколько байт при настройке порта и считывайте себе непрерывно, появился байт - занесли, чего ожидать собственно/

MSDN
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 01.06.2010 в 14:33.
raxp вне форума Ответить с цитированием
Старый 01.06.2010, 21:18   #3
osandr
 
Регистрация: 01.06.2010
Сообщений: 4
По умолчанию

Проблемы в приеме данных нет. Этим занимается поток и выделен специальный буфер. Проблема в том, что буфер заполняется не мгновенно и проге нужно определить, когда в нем появятся данные, чтобы продолжать дальнейшие действия. Т.е. она проверила есть ли данные, если нет, то подождала пока появятся и потом продолжила выполнения с того места, где остановилась...
osandr вне форума Ответить с цитированием
Старый 02.06.2010, 09:32   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вы гляньте в генофонд любой компоненты, тот же - bcomport ...особенно присмотритесь к событию получения данных и вопросы отпадут.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отловить изменение данных LTP порта doober Общие вопросы .NET 0 22.04.2010 15:21
программа для снятия данных с LPT порта Joslen_bomon Софт 2 08.11.2009 19:27
Асинхронная передача данных eda Microsoft Office Excel 4 17.08.2009 14:16
Приём данных с com порта kyc0k Помощь студентам 3 28.03.2008 15:04
Как получить данные с COM-порта или другого любого порта? DeLure Общие вопросы C/C++ 5 20.09.2007 00:50