опубликован 23-01-2002 02:40 MSK
От внешнего устройства на коммпорт приходит сигнал EV_DSR, WaitCommEvent() его отлавливает. Но в случае если сигнала от устройства нет, то WaitCommEvent ждет его вечно, а нужно ждать к примеру пять секунд, для этого по идее пригодится функция WaitForSingleObject(), но она в программе не работает. Как сделать, чтоб она заработала? Т.е. как вместо WaitCommEvent можно использовать WaitForSingleObject для реагирование на получение сигнала EV_DSR?
Или хотя бы на получение любого сигнала на коммпорт как применяется WaitForSingleObject?
Я все перепробовал, что-то не получается, в чем ошибка? HANDLE port;
DWORD bc;
DCB dcb;
BOOL fSuccess;
OVERLAPPED event;
DWORD dwEvtMask;
ZeroMemory(&dcb,sizeof(DCB));
strcpy(buffer,"baud=1200 parity=N data=8 stop=1");
BuildCommDCB((char*)&buffer,&dcb);
dcb.fRtsControl = RTS_CONTROL_ENABLE;
port=CreateFile("COM1",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
GetCommState(port,&dcb);
SetCommState(port,&dcb);
HeapFree(GetProcessHeap(),0,&dcb);
fSuccess = SetCommMask(port, EV_DSR);
event.hEvent = CreateEvent (NULL,FALSE,FALSE,NULL );
if (WaitCommEvent(port,&dwEvtMask, &event))
{
if (dwEvtMask & EV_DSR)
{
// Какое-то действие
}
}
// Пробовал вместо WaitCommEvent вот это
//if (WaitForSingleObject(event.hEvent,
//5000) == WAIT_OBJECT_0)
//{
//// Какое-то действие
//}
//else AfxMessageBox("Нет сигнала от устройства");
//не ловит сигнал