有没有办法用waitsingalobject来等待串口上的N字节的buffer?我只要一调用ReadFile,如果串口上没有数据的话,就返回了,似乎WaitSingalObject用不上,
我想要等待串口上已经有了指定的N长度的buffer之后再ReadFile。请教有没有什么办法?
我想要等待串口上已经有了指定的N长度的buffer之后再ReadFile。请教有没有什么办法?
解决方案 »
- 临时得用MFC,问一个傻瓜问题
- xsc2001大哥,如果是这样,那还不如就发字符串
- VC++环境下如何清空list control中的内容?
- 如何解决由于改变控件大小所引起的屏幕闪烁?
- 只有一个窗体的m_hWnd,如何更改它的PreTranslateMessage行为
- 请问:我在任意一个目录下面注册了一个ocx控件,怎样用vc编写代码得到注册的这个路径呢?
- 想知道几个特定颜色的RGB值
- 初学者:画笔的Inside frame 是什么线啊?
- 一个关于 CString 转换为 char * ,的问题??
- 为什么GETFIELDVALUE老是提示无效的描述符索引,崩溃了!
- 不调用TranslateMessage,可以从WM_KEYDOWN消息得到WM_CHAR消息对应的那两个参数吗?
- 如何创建一个线程
char lpInBuffer[1024];
DWORD dwBytesRead=1024;
COMSTAT ComStat;
DWORD dwErrorFlags;
OVERLAPPED m_osRead;
memset(&m_osRead,0,sizeof(OVERLAPPED));
m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);ClearCommError(hCom,&dwErrorFlags,&ComStat);
dwBytesRead=min(dwBytesRead,(DWORD)ComStat.cbInQue);
if(!dwBytesRead)
return FALSE;
BOOL bReadStatus;
bReadStatus=ReadFile(hCom,lpInBuffer,
dwBytesRead,&dwBytesRead,&m_osRead);if(!bReadStatus) //如果ReadFile函数返回FALSE
{
if(GetLastError()==ERROR_IO_PENDING)
//GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作
{
WaitForSingleObject(m_osRead.hEvent,2000);
//使用WaitForSingleObject函数等待,直到读操作完成或延时已达到2秒钟
//当串口读操作进行完毕后,m_osRead的hEvent事件会变为有信号
PurgeComm(hCom, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return dwBytesRead;
}
return 0;
}
PurgeComm(hCom, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
return dwBytesRead;
怎么解决这个问题呢?
它的值可能是dwBytesRead=0
你读0个字节,当然ReadFile返回true