|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.06.2010, 13:55 | #1 |
Регистрация: 01.06.2010
Сообщений: 4
|
Асинхронная обработка принятых данных от порта
Пишу программу на Delphi 7 для управления устройством на микроконтроллере. Устройство подключается к COM-порту. Устройство работает по следующему принципу: программа посылает один или несколько байт, которые устройство расценивает как команды. В зависимости от команды оно посылает соответствующий ответ в виде одного или нескольких байт.
В программе есть два потока. Один – для чтения, второй – для записи в порт. Поток чтения постоянно запущен. Как только приходят байты, происходит их считывание в буфер, представляющий собой TList. Поток записи запускается по необходимости. Мне нужно контролировать принятые байты, чтобы знать, как устройство отреагировало на команды. Так вот вопрос следующий: как мне заставить программу подождать, пока в списке TList появится первый элемент, т.е. придет хотя бы один байт? В микроконтроллере это реализуется просто. Запускается цикл while, в котором ожидается наступление какого-то события, например установки какого-либо флага. Если использовать такой метод в моей программе, то она будет зависать. Как организовать ожидание прихода байта (или нескольких байт), без зависания программы? |
01.06.2010, 14:31 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
непонятна проблема... ставьте размер буфера на 1 или несколько байт при настройке порта и считывайте себе непрерывно, появился байт - занесли, чего ожидать собственно/
MSDN
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 01.06.2010 в 14:33. |
01.06.2010, 21:18 | #3 |
Регистрация: 01.06.2010
Сообщений: 4
|
Проблемы в приеме данных нет. Этим занимается поток и выделен специальный буфер. Проблема в том, что буфер заполняется не мгновенно и проге нужно определить, когда в нем появятся данные, чтобы продолжать дальнейшие действия. Т.е. она проверила есть ли данные, если нет, то подождала пока появятся и потом продолжила выполнения с того места, где остановилась...
|
02.06.2010, 09:32 | #4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
вы гляньте в генофонд любой компоненты, тот же - bcomport ...особенно присмотритесь к событию получения данных и вопросы отпадут.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как отловить изменение данных 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 |