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

Опять COM-порт

26.12.2008, 14:33. Показов 7038. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru