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);
}
}
}
}
Работа с Com портом. Windows не сбрасывает событие.
Код:
Но вот тут и проблема. Когда в другой порт записываю (нуль модемный кабель) допустим в COM1 "12345", то в COM2 появляется такое "12345555555555...". А мне надо только "12345". Подскажите пожалуйста что делать?
Цитата:
Originally posted by Shopot
Я открываю порт для в/в так:
Но вот тут и проблема. Когда в другой порт записываю (нуль модемный кабель) допустим в COM1 "12345", то в COM2 появляется такое "12345555555555...". А мне надо только "12345". Подскажите пожалуйста что делать?
Я открываю порт для в/в так:
Код:
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);
}
}
}
}
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.
Вроде, так.