WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  WaitForSingleObject

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   WaitForSingleObject
MrSergei опубликован 23-01-2002 02:40 MSK   Click Here to See the Profile for MrSergei   Click Here to Email MrSergei  
От внешнего устройства на коммпорт приходит сигнал 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("Нет сигнала от устройства");
//не ловит сигнал

zAg опубликован 23-01-2002 03:06 MSK     Click Here to See the Profile for zAg  Click Here to Email zAg     
Попробуй указать параметр FILE_FLAG_OVERLAPPED в dwFlagsAndAttributes для CreateFile:
port=CreateFile(
"COM1",
GENERIC_READ | GENERIC_WRITE,
0, // share mode
NULL, // pointer to security attributes
OPEN_EXISTING , // how to create
FILE_FLAG_OVERLAPPED, // file attributes
NULL // handle to file with attributes to copy
);

В этом случае все должно работать как надо

MrSergei опубликован 24-01-2002 03:07 MSK     Click Here to See the Profile for MrSergei  Click Here to Email MrSergei     
Я это уже пробовал, не работает, хотя везде написано что так и должно работать. Что самое интересное WaitCommEvent работает, а
WaitForSingleObject с сигналом типа DSR не хочет, может у меня только так?:(

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.