Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/35: Рейтинг темы: голосов - 35, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 26.12.2008
Сообщений: 3

Опять COM-порт

26.12.2008, 14:33. Показов 7021. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для чтения данных с компорта создаю вспомогательный поток, далее как обычно:
C++
1
2
3
4
5
6
7
8
9
10
OverlapPort.hEvent = CreateEvent( NULL, false, true, NULL ); 
DWORD hMask = SetCommMask( hComport,EV_RXCHAR ); 
while( !Terminated )
{
       WaitCommEvent( hComport, &hMask, &OverlapPort );
       Mask = WaitForSingleObject( OverlapPort.hEvent, 5 );         
       Synchronize( Processed );
};
CloseHandle( OverlapPort.hEvent ); 
CloseHandle( OverlapExit.hEvent );
Таймауты настроил.
Проблема в WaitCommEvent - стопорит поток и пока не придет реальный байт оттуда не выходит. Т.е. корректно закрыть порт не могу. В основном потоке пытаюсь делать так:
C++
1
2
3
Reader->Terminate();
SetCommMask( hComport, 0 );
Sleep(5);
Но попытка сбросить маску вешает программу. Насколько понимаю WaitCommEvent работает некоректно. Вопрос почему?? В чем проблема??

Win XP SP3, Билдер 2007.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2008, 14:33
Ответы с готовыми решениями:

Опять про COM порт
Здравствуйте. Наверняка данный вопрос уже неоднократно появлялся, но т.к. я к сожалению не программист, а скорей "железяньщик",...

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

Опять БАН опять Яндекс...
Вообщем ситуация такая, был сайт, написаный на дримвевере, отлично индексируемый и имеющий 400-500 переходв с поисковика яндекса. Стали...

8
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
26.12.2008, 17:36
Непонятно, зачем тебе WaitCommEvent и overlapped-ввод одновременно?
Какую задачу должен решить этот код?
0
0 / 0 / 0
Регистрация: 26.12.2008
Сообщений: 3
26.12.2008, 18:28  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Непонятно, зачем тебе WaitCommEvent и overlapped-ввод одновременно?
Какую задачу должен решить этот код?
Задача - общение с девайсом. Отправляю запрос из основного процесса, потом создаю вспомогательный поток для ожидания ответа от устройства, считываю кусками приходящие данные в буфер, основной процесс парсит их на лету. Когда приходит ETX порт закрывается. Или закрытие по таймауту. Режим полудуплексный.

Все делал на основе примеров. Ладно, допустим, сделаю без оверлап структуры - WaitCommEvent начнет работать правильно? Проблема в том что она полностью закрывает порт для управления извне пока не придет байт, а должна по идее просто проверить флаг - пришел байт и вернуть результат сразу же.
0
Флудер
 Аватар для Ensase
195 / 33 / 11
Регистрация: 23.03.2007
Сообщений: 334
26.12.2008, 21:18
я работаю с комовой камерой и сначала пытался читать в отдельном потоке. но были подобные проблемы. сейчас читаю и пишу в разное время. с обработкой ответов устройства проблем нет. пользуюсь библиотекой serialgate с сайта www.pcports.ru
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
28.12.2008, 23:02
Хм. Ну, сообщи свою почту - я тебе скину класс для работы с COM-портом. Он, правда, написан под MSVC++, но переделать под Билдер - час работы. За много-много лет (с 2002 г.) глюков замечено не было.
0
0 / 0 / 0
Регистрация: 26.12.2008
Сообщений: 3
29.12.2008, 08:36  [ТС]
Цитата Сообщение от CheshireCat Посмотреть сообщение
Хм. Ну, сообщи свою почту - я тебе скину класс для работы с COM-портом. Он, правда, написан под MSVC++, но переделать под Билдер - час работы. За много-много лет (с 2002 г.) глюков замечено не было.
rusoil.9@gmail.com

Спасибо за помощь.
0
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 4
27.08.2009, 00:44
CheshireCat, а можно и мне скинуть на мой ящик r2rv@mail.ru класс для работы с COM-портом, написанном на MSVC++? Очень нужно! Заранее благодарю!
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
27.08.2009, 00:56
CheshireCat,
За много-много лет (с 2002 г.) глюков замечено не было.
это, наверное, потому, что ты не используешь в этом классе "неправильную" функцию WaitCommEvent, которая работает "некорректно"
rofl.
0
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
06.05.2010, 09:53
Вот мой класс для работы с COM портом
Написан на чистом Win32Api
Должно компилироваться везде MSV и Builder
Вложения
Тип файла: zip SerialPort.zip (6.1 Кб, 376 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2010, 09:53
Помогаю со студенческими работами здесь

Открыть порт 4444 в брэндмауэре. Антивируса нет. провайдером порт открыт
Подскажите как открыть данный порт,все делал как тут http://windows.microsoft.com/ru-ru/windows/open-port-windows-firewall#1TC=windows-7....

В конфигурационном файле прописан порт, но пишет ошибку порт 80 занят другим приложением
Здравствуйте. Пишу решение с 2 проектами - сервер и клиент с дуплексным контрактом. Служба запускается нормально. Когда же запускаю...

Gameorplay Опять и опять
Здравствуйте, уважаемые знатоки. Помогите пожалуйста решить проблему с автоматическим запуском Firefox при старте Windows и открытия сайта...

В порт в среднем приходит 3 корабля в день. Какова вероятность того, что в порт в день придет 2 корабля; 4 корабля?
помогите решить пожалуйста В порт в среднем приходит 3 корабля в день. Какова вероятность того, что в порт в день придет 2 корабля;...

Примеры использования Async Free (СОМ-порт) или Async Pro (СОМ-порт)
Здравствуйте! Скажите пожалуйста есть пример где используют Async Free (СОМ-порт) или Async Pro (СОМ-порт)? почему то не могу найти и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru