Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Опрос в бесконечном цикле блокирует программу


WhiteBarin ©   (2006-06-02 10:26:00) 

Здравствуйте!
Как реализовать опрос COM порта в бесконечном цикле?
Опрашивать COM порт я умею
Проблема заключается что при опросе в бесконечном цикле
с выходом по флагу программа блокируется и нажать никакую
кнопку не получается
Как реализвать опрос так чтобы например нажал кнопку СТАРТ и пошёл бесконечный опрос, затем нажал кнопку СТОП опрос остановился


Kolan   (2006-06-02 15:40:00) [1]

Извеняюсь за личную переписку,
 Но не ушло таки, а вернулось назад. Свяжитесь со мной по ICQ(она в анкете), чтобы не засорять форум...


Kolan   (2006-06-02 15:34:00) [2]

Пардон, ушло...


Kolan   (2006-06-02 15:31:00) [3]

Почту давай...


WhiteBarin   (2006-06-02 14:39:00) [4]

Могу поделится только что добитым(может еще на доконца)... кодом.
Два класса 1 работас портом. 2 поток для организации бесконечного опроса.
Если что-то приходит тут-же выдаёт..

Хотелось бы посмотреть на исходники


Kolan   (2006-06-02 14:31:00) [5]


> WhiteBarin ©   (02.06.06 10:26)

Могу поделится только что добитым(может еще на доконца)... кодом.
Два класса 1 работас портом. 2 поток для организации бесконечного опроса.
Если что-то приходит тут-же выдаёт..


tesseract   (2006-06-02 14:29:00) [6]

Ну можно и так и так, просто после посылки команды, ус-во отвечает в пределах 200 мс.


Evgeny V   (2006-06-02 14:08:00) [7]

На мой взгляд лучше в отдельном потоке использовать  WaitCommEvent,  порт открывать для асинхронной работы. Если вы используете компонент, то возможно в нем уже есть реализация всего сказанноговам ранее в том или ином видею Про маску - функция WaitCommEvent ожидает события на порту, или в случае асинхронной работы будет взведено событие, указанное в overlapped структуре, переданной WaitCommEvent в качестве параметра.
Какие события порта будут вас интерисовать, вы указываете функцией SetCommMask. Рекомендую посмотреть описание этих функции, почитать стать по работе с портами, в интернете их полно.  Есть и готовые хорошие компоненты, раньше видел много на www.torry.net Про потоки - посмотрите класс TThread.


tesseract   (2006-06-02 12:25:00) [8]


> сообщение на контроллер и получает от него ответ это я и
> называю опросом

тогда лучше  без маски, но с overlapped.  В ветке  Winapi много кода по этой теме.
поищи.


WhiteBarin   (2006-06-02 11:46:00) [9]

Простите немного не пойму у мена не сканер не ридер а программа посылает
сообщение на контроллер и получает от него ответ это я и называю опросом

а смаской не пойму немного, я использую для работы с ком портом компонент
щас вроде бы всё нормально работает только хотелось бы чтобы этот цикл работал в другом потоке, вот и возникает вопрос как создать этот поток и в нём что-либо делать, я понимаю что это азы но никогда не приходилось делать


tesseract   (2006-06-02 11:40:00) [10]


> например создать поток и в нём этот опрос производить но
> с чего начать не знаю можете подсказать?

говорю же не опрос лучше, а реакция на маску. Как я понимаю ус-во то-ли сканер то-ли ридер.

Создаём маску на EV_RXCHAR и в соседнем потоке вешаем WaitCommMask и ждём до упора (cancelIO снимет ожидание). потом ClearComError смотрим сколько пришло и считываем данные.


WhiteBarin   (2006-06-02 11:18:00) [11]

Да точно как я мог блин упустить модальный вызов!!!
Спасибо
Так мо идее выходом из этого (чтобы не прерывать процесс опроса) является
если в "лоб" вызов других ворм через Show, Hide?

И ещё может быть создать отдельное приложение и в нём опрашивать (получиться отдельный процесс) если опять  в "лоб"
Но хочеться красиво реализовать
например создать поток и в нём этот опрос производить но с чего начать не знаю можете подсказать?


ЮЮ   (2006-06-02 11:11:00) [12]


> при открытии например другой формы проекта данный цикл как
> бы останавливается


Наверное открытие в модальном режиме? В этом случае и продолжение кода обработчика продолжится только по закрытии модальной формы, а код обработчика это и есть обработка сообщений


ЮЮ   (2006-06-02 11:08:00) [13]


>
> Позволяет программе обрабатывать сообщения Windows.

Точнее, сначала будут обработаны накопившиеся сообщения, в том числе рисование окна, клики мышью и т.п., а затем продолжится выполнение кода, откуда было вызвано Application.ProcessMessages


WhiteBarin   (2006-06-02 11:07:00) [14]

Application.ProcessMessages какие плюсы какие минусы этого методо в отличии от

Либо реализовать "опрос" в доп.потоке либо отказаться от "опроса" в пользу асинхронного неблокирующего режима работы с портом

И если не сложно поясните метод с потоком по-подробнее
я понимаю что создать поток и в нём опрашивать или нить, т.е.
другими словами создать программу опрашивающую и главную при старте появляется программа опрашивающая, при стопе закрывается

я попробовал с Application.ProcessMessages вроде бы нормально работает не блокирует работу пользователя, но если например при открытии например другой формы проекта данный цикл как бы останавливается а после закрытия возобновляет свою работу, почему это происходит?


tesseract   (2006-06-02 11:04:00) [15]

Используй лучше WaitCommMask и асинхронное чтение, сильно экономит такты процессора.


ГерманнД   (2006-06-02 10:55:00) [16]


> А что именно делает
> Application.ProcessMessages?

Позволяет программе обрабатывать сообщения Windows.


WhiteBarin   (2006-06-02 10:50:00) [17]

немного не понял
> отказаться от "опроса" в пользу асинхронного неблокирующего режима работы с портом.
А что именно делает
Application.ProcessMessages?
какие плюсы какие минусы каждого из вариантов?


ГерманнД   (2006-06-02 10:45:00) [18]

Если "в лоб" отвечать на сабж, то достаточно в цикл вставить Application.ProcessMessages.
А если грамотно, то [1]. Причём я за асинхронный режим.


Сергей М.   (2006-06-02 10:28:00) [19]

Либо реализовать "опрос" в доп.потоке либо отказаться от "опроса" в пользу асинхронного неблокирующего режима работы с портом.


Наверх

Титульная страница Поиск, карта сайта Написать письмо