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

Опять COM-порт

26.12.2008, 14:33. Показов 6979. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru