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

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени. При работе с 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2017, 08:50
Ответы с готовыми решениями:

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

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

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

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

2
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,787
Записей в блоге: 9
13.08.2017, 07:09 2
Цитата Сообщение от Борис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Эксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.08.2017, 07:58 3
Цитата Сообщение от Борис144 Посмотреть сообщение
При работе с COM-портом
Борис144, для кого это писалось?
0
13.08.2017, 07:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2017, 07:58
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru