重叠方式读取数据:memset(&mOverlapped,0,sizeof(OVERLAPPED));
mOverlapped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
DWORD dwBytesRead = 100;
if(!ReadFile(mhCom, mReadBuf,dwBytesRead,&dwBytesRead,&mOverlapped))
{
if(GetLastError() != ERROR_IO_PENDING)
{
MessageBox("失败!");
return ;
}
}
WaitForSingleObject(mOverlapped.hEvent,INFINITE);
如果硬件发送了50个字接到COM口,是不是WaitForSingleObject就不会返回,
一定要接收满100字接才返回?

解决方案 »

  1.   

    不能这么写看看msdn用GetOverlappedResult函数循环来读
      

  2.   

    能不能具体点,我是参考vckbase上的一个例子.
      

  3.   

    memset(&mOverlapped,0,sizeof(OVERLAPPED));
    mOverlapped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
    DWORD dwBytesRead = 100;
    if(!ReadFile(mhCom, mReadBuf,dwBytesRead,&dwBytesRead,&mOverlapped))
    {
    if(GetLastError() != ERROR_IO_PENDING)
    {
    MessageBox("失败!");
    return ;
    }
    }BOOL bResult = GetOverlappedResult(mhCom, &mOverlapped, &dwBytesRead, TRUE);
    if (!bResult)  
    {
    MessageBox("失败!");
    }