Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с Com портом. Windows не сбрасывает событие.

9.7K
24 августа 2005 года
Shopot
8 / / 16.08.2005
Я открываю порт для в/в так:

Код:
Comm2 = CreateFile (cbComm2->Text.c_str(), GENERIC_WRITE | GENERIC_READ,
                0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

        if (Comm2 == INVALID_HANDLE_VALUE)
        {
                ShowMessage("Ошибка открытия порта " + cbComm2->Text);
                return;
        }

        if (!SetCommMask(Comm2, EV_RXCHAR))
        {
                ShowMessage("Ошибка " + cbComm2->Text);
                CloseHandle(Comm2);
                return;
        }

        o2.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

        assert(o2.hEvent);

        t2 = CreateThread(NULL, 1024, funcComm2, Handle, 0, &t2_ID);

DWORD WINAPI funcComm2(LPVOID Param)
{
        DWORD EvMask1 = 0, NumRead; char Data;

        for (;;)
        {
                if (WaitCommEvent(Comm2, &EvMask1, &o2) == 0)
                {
                        if (EvMask1 & EV_RXCHAR)
                        {
                                ReadFile(Comm2, &Data, sizeof (char),
                                        &NumRead, &o2);
                                frmComm->mState2->Lines->Add(Data);
                        }
                }
        }
}


Но вот тут и проблема. Когда в другой порт записываю (нуль модемный кабель) допустим в COM1 "12345", то в COM2 появляется такое "12345555555555...". А мне надо только "12345". Подскажите пожалуйста что делать?
1.8K
25 августа 2005 года
_const_
229 / / 26.11.2003
Цитата:
Originally posted by Shopot
Я открываю порт для в/в так:

Код:
Comm2 = CreateFile (cbComm2->Text.c_str(), GENERIC_WRITE | GENERIC_READ,
                0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

        if (Comm2 == INVALID_HANDLE_VALUE)
        {
                ShowMessage("Ошибка открытия порта " + cbComm2->Text);
                return;
        }

        if (!SetCommMask(Comm2, EV_RXCHAR))
        {
                ShowMessage("Ошибка " + cbComm2->Text);
                CloseHandle(Comm2);
                return;
        }

        o2.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

        assert(o2.hEvent);

        t2 = CreateThread(NULL, 1024, funcComm2, Handle, 0, &t2_ID);

DWORD WINAPI funcComm2(LPVOID Param)
{
        DWORD EvMask1 = 0, NumRead; char Data;

        for (;;)
        {
                if (WaitCommEvent(Comm2, &EvMask1, &o2) == 0)
                {
                        if (EvMask1 & EV_RXCHAR)
                        {
                                ReadFile(Comm2, &Data, sizeof (char),
                                        &NumRead, &o2);
                                frmComm->mState2->Lines->Add(Data);
                        }
                }
        }
}


Но вот тут и проблема. Когда в другой порт записываю (нуль модемный кабель) допустим в COM1 "12345", то в COM2 появляется такое "12345555555555...". А мне надо только "12345". Подскажите пожалуйста что делать?



Из MSDN:
If hFile was opened with FILE_FLAG_OVERLAPPED and lpOverlapped is not NULL, WaitCommEvent is performed as an overlapped operation. In this case, the OVERLAPPED structure must contain a handle to a manual-reset event object (created by using the CreateEvent function).

Следовательно, в CreateEvent устанавливаем bManualReset = TRUE, а после WaitCommEvent - ResetEvent.

Вроде, так.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог