Программирование под модем.Чтобы постоянно опрашивать модем на предмет поступления новых символов надо открыть дополнительный поток с бесконечным циклом.
//Прототип функции дополнительного потока.
UINT TerminalThread(LPVOID arg);
DWORD dwCount;
DCB dcb;
HANDLE hCommPort;
DWORD Errors;
COMSTAT pComStat;
COMMTIMEOUTS CommTimeouts;
UINT TerminalThread(LPVOID arg)
{
//Открытие порта
hCommPort = CreateFile(options.Port, GENERIC_READ
| GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, 0);
//Получаем настройки порта
GetCommState(hCommPort, &dcb);
//Меняем часть настроек на свои
dcb.BaudRate = 9600; //Скорости в бодах
dcb.ByteSize = 8; //Байты информации
dcb.Parity = NOPARITY; //Четность
dcb.StopBits = ONESTOPBIT; //Кол-во стоп. битов
//Устанавливаем новые настройки
SetCommState(hCommPort, &dcb);
/* Установка таймаутов.
Служит, чтобы программа не висла
в ожидании ответа от модема */
GetCommTimeouts(hCommPort,&CommTimeouts);
CommTimeouts.ReadIntervalTimeout = 50;
CommTimeouts.ReadTotalTimeoutMultiplier = 1;
CommTimeouts.ReadTotalTimeoutConstant = 50;
CommTimeouts.WriteTotalTimeoutMultiplier = 1;
CommTimeouts.WriteTotalTimeoutConstant = 50;
SetCommTimeouts(hCommPort,&CommTimeouts);
//Очистка буфера (На всякий случай)
FlushFileBuffers(hCommPort);
//Цикл опроса модема
for (;;) {
//Опрос модема
ReadFile(hCommPort, &ch, 1, &dwCount, NULL);
if(ch) //Проверка на наличие символа
{
//Вывод поступившего символа
Функция_форматированного_вывода_символа(&ch,1);
};
ch = 0;
}
return 0;
}
Класс ввода/вывода HCSVIEWНиже приведенный класс предназначен для форматированного ввода/вывода. По интерфейсу класс максимально близок к средствам ввода/вывода под Dos. Т.е. вам придется только задать окно и текст, который надо вывести в этом окне, все остальное класс берет на себя. Текст, который не помещается в окне будет автоматически перенесен на следующую строку. Также класс понимает символы возврата каретки и перехода на следующую строку. Чтобы осуществить прокрутку в окне, надо всего лишь перенаправить данные получаемые по сообщению ON_WM_SCROLL соответствующей функции класса. Класс HCSView:
Пример работы с классом
|