Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37

Чтение с ком-порта

01.06.2021, 18:23. Показов 1293. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте. Писал практику, программа должна шифровать данные и отправлять их на ком - порт. Затем, принимать их обратно и дешифровать. Проблема возникла после обновления студии. Функция чтения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void ReadCOM()
{
    while (1) {
        ofstream f_out;
        DWORD iSize;
        string text;
        char sReceivedString[2];
        BOOL iRet = ReadFile(hSerial, &sReceivedString, 1, &iSize, 0);  // получаем 1 байт
        if (iSize > 0)
            cout << sReceivedString;
        else break;
        f_out.open("practice_encoded.txt", ios_base::app);
        sReceivedString[1] = '\0';
        f_out << sReceivedString;
        f_out.close();
    }
}
Суть в том, что раньше все работало. Теперь же он все так же считывает все данные, но не выходит из цикла, когда не получает байт. Вообще довольно странно, прокрутил все символы, во время последней итерации (с пустым байтом) программа почему то просто останавливается на строке
C++
1
 BOOL iRet = ReadFile(hSerial, &sReceivedString, 1, &iSize, 0);  // получаем 1 байт
И пропадает стрелочка чтобы продолжить выполнение, можно только остановить отладку. Подскажите, что здесь конкретно не так?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2021, 18:23
Ответы с готовыми решениями:

вопрос по скорости ком порта
есть оригинальная программа для обмена данными с сотовым телефоном. но версия моего аппарата не поддерживается. на основе команд с нее...

Как узнать кол-во допупных байтов для чтения с ком-порта
Доброго времени суток, уважаемые программисты! Есть скопированная отсюда прога, но она просто пишет на порт и читает в бесконечном цикле:...

Чтение из COM-порта
Здравствуйте! Никак не могу правильно прочитать данные из COM-порта. Мой процессор отправляет в компорт в бесконечном цикле (каждые...

6
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.06.2021, 18:52
TongueLizard,

ReadFile у вас похоже в блокирующем режиме. Так что он просто ждет следующей порции данных.

По идее надо бы переделать на асинхронное I\O и проблемы не будет.
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
01.06.2021, 21:49  [ТС]
А как я могу это сделать?

Добавлено через 2 часа 25 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
ReadFile у вас похоже в блокирующем режиме.
В том то и дело, что раньше все работало. Захожу сегодня, не видит библиотеки, пошел обновил студию. Теперь почему-то ReadFile блокируется пока не получит данные. Я уже пытался закрывать порт после передачи, все безуспешно. Указывать количество считываний - не вариант, так как текст может быть любой. Раньше он спокойно выходил break-ом из цикла, если ничего не получал.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.06.2021, 23:22
TongueLizard, сомнительно, если честно. Возможно вы что-то все-таки изменили.

Цитата Сообщение от TongueLizard Посмотреть сообщение
А как я могу это сделать?
Читайте про OVERLAPPED IO.
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
02.06.2021, 09:57  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
OVERLAPPED IO.
Вы имеете ввиду это?
C++
1
2
_OVERLAPPED ovl={0};
BOOL iRet = ReadFile(hSerial, &sReceivedString, 1, &iSize, &ovl);
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
02.06.2021, 10:00
TongueLizard, ну это и остальное, WaitForSingleObject и т.д. Обработку ошибок не забудьте добавить.
0
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
02.06.2021, 16:23
не знаю поможет ли - здесь под спойлером я оставляла пример найденный, но сама в дебри так и не полезла... может, попробуйте препарировать его (или хотя бы почитать)...
(ветка: Скорость чтения csv... от bedvit)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2021, 16:23
Помогаю со студенческими работами здесь

Чтение из LPT порта
LPT порт в режиме EPP. С некоторой частотой на него приходит последовательность импульсов, которые надо прочитать. Читать в бесконечном...

Чтение/запись с COM - порта
Всем доброго времени суток. Занимаюсь практикой от предприятия в институте. Задание по реализации симметричного шифрования при передаче...

Побайтовое чтение COM порта
Доброго времени суток. Обычно из COM порта читают передавая в функцию чтения указатель на буфер и сколько байтов прочитать. Как...

Определение паузы при чтение с COM порта
Пишу под OS Windows 7 visual studio c использованием MFC. Нужно добиться определения наличия паузы между принятием двух байт по COM...

Непрерывное чтение и обработка с com порта (последовательный порт) в Visual C++
Здравствуйте, я задумал одну идею с GPS приемником, но для того чтобы реализовать это мне необходимо читать и обработать данные с com порта...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru