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

Работа с функцией ReadFile

12.08.2017, 08:50. Показов 2397. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени. При работе с COM-портом в синхронном режиме возникают проблемы с выходом из функции ReadFile(). В примере кода идет опрос порта в бесконечном цикле. Вопрос: какими способами из него можно выйти? Манипуляции с условиями, связанными с iSize не дают толку. Однако, если в буфере есть данные, то выйти из цикла возможно по условию while (!kbhit()), но если данных в нем нет, вроде как все зависает и нет никакой реакции. Как решить такую проблему? Есть методы?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <iostream>
#include <cctype>
#include <fstream>
#include <cstdlib>
#include <time.h>
#include <stddef.h>
 
 
using namespace std;
 
HANDLE hSerial;
 
        void ReadCOM()
         {
      
          char sReceivedChar;
      DWORD iSize = sizeof(sReceivedChar);
      DWORD dBytesWritten;
      while (!kbhit()){
 
            ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);  // получаем 1 байт
        if (iSize > 0)   // если что-то принято, выводим
            {
                cout << sReceivedChar;
            }
        }
    }
 
int main()
{
       setlocale(LC_ALL, "Russian");
       LPCTSTR sPortName = L"COM3";
       hSerial = ::CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL, NULL);//FILE_ATTRIBUTE_NORMAL
    if(hSerial==INVALID_HANDLE_VALUE)
    {
            if(GetLastError()==ERROR_FILE_NOT_FOUND)
        {
                cout << "serial port does not exist.\n";
        }
        cout << "some other error occurred.\n";
    }
 
    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams))
    {
        cout << "getting state error\n";
    }
    dcbSerialParams.BaudRate=CBR_9600;
    dcbSerialParams.ByteSize=8;
    dcbSerialParams.StopBits=ONESTOPBIT;
    dcbSerialParams.Parity=NOPARITY;
    
 
    if(!SetCommState(hSerial, &dcbSerialParams))
    {
        cout << "error setting serial port state\n";
    }
 
        ReadCOM();
        
    
    CloseHandle(hSerial);
    _getch();
    return 0;
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.08.2017, 08:50
Ответы с готовыми решениями:

Работа с функцией

Работа с функцией
Привет Всем!!! Помогите пожалуйста. Нужно: Определить функцию, которая возвращает натуральное число, если аргумент функции является...

Работа с функцией
Описать функцию smooth(A,n), заменяющую каждый элемент вещественного массива A размера n на его среднее арифметическое со своими соседями...

2
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.08.2017, 07:09
Цитата Сообщение от Борис144 Посмотреть сообщение
Манипуляции с условиями, связанными с iSize не дают толку.
Почему? Вроде логично:
C++
1
2
3
4
5
6
7
8
9
while (!kbhit()){
 
                ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0);  // получаем 1 байт
        if (iSize > 0)   // если что-то принято, выводим
            {
                cout << sReceivedChar;
            }
                else {break;}
        }
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.08.2017, 07:58
Цитата Сообщение от Борис144 Посмотреть сообщение
При работе с COM-портом
Борис144, для кого это писалось?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.08.2017, 07:58
Помогаю со студенческими работами здесь

работа с функцией в С++
В ходе выполнения работы необходимо создать программу, которая определяет и инициализирует двумерный массив целых значений и затем...

Работа с функцией
Задание : Отсортировать массив по возрастанию #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int...

Работа с функцией
Всем привет! Столкнулся с одной проблемой. По моему заданию функция должна возвращать новый размер массива, а она у меня выводит его (а...

Работа с функцией
Проблема в том что мне нужно разложить на простые множители определенный набор чисел а моя функция почему-то принимает только 1 член набора...

работа с функцией
1)Локализовать 1 корень уравнения табличным методом 2)построить график функции в области корня 3)Найти корень с погрешностью...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 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. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru