win2k 异步操作串口,需要怎样才比较好,我的代码有点问题
我先把 问题 说一下:
1. 为什么 代码中的 ::WaitForSingleObject 函数 没有 阻塞 ?
ov.hEvent 应该处于 nonsignaled 状态 才对
////////////////////
完整 代码如下, 省略 容错部分:
大家可以 直接复制过去 然后 试试看
////////////////////////////////
//
//
// 第1步 以异步方式 打开串口 com2
//
HANDLE hFile =::CreateFile("\\\\.\\COM2",
GENERIC_READ | GENERIC_WRITE,
0,NULL,OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,NULL); // 异步 方式 打开
DCB dcb = {0};
::GetCommState(hFile, &dcb);
dcb.BaudRate = 9600 ;
dcb.ByteSize = 8 ;
dcb.Parity = 0 ;
dcb.StopBits = 1 ;
::SetCommState(hFile, &dcb);
::SetupComm(hFile, 1024 , 1024 );
COMMTIMEOUTS timeouts = {100,1,500, 1, 100};
::SetCommTimeouts(hFile, &timeouts);
OVERLAPPED or = {0};
or.hEvent = ::CreateEvent(NULL,FALSE,FALSE,NULL);
BYTE data[100] = {0};
DWORD dwRead;
UINT nRes = ::ReadFile(hFile, data, 50, &dwRead, &or);
if( !nRes )
{
if(::GetLastError() == ERROR_IO_PENDING )
{
DWORD dwRes = ::WaitForSingleObject( or.hEvent,INFINITE);// 这一步 应该 阻塞
// 但是 我实验的结果
// 是 马上返回
// 为什么 ?
if( dwRes == WAIT_OBJECT_0 )
{
TRACE(" dwRes == WAIT_OBJECT_0\n");
}
}
}
::CloseHandle(hFile);
//
////////////////////////////////
请帮忙分析一下原因,谢谢