0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 9

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

12.08.2017, 08:50. Показов 2331. Ответов 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7 Чтобы решить задачу, использовал интернет: поисковики Google и Yandex, а также подсказки Deep Seek. Как оказалось, чтобы создать. . .
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru