在串口接收中,用ClearCommError()函数,得到的comstat的cbInQue总<=8,怎样才能〉8?
就是说我收22个数要分3次才能收完。怎样才能一次收完阿?谢谢!
就是说我收22个数要分3次才能收完。怎样才能一次收完阿?谢谢!
解决方案 »
- 求助 一个关于socket的问题?
- clistctrl 输出数据的问题
- DHTML Editing Component SDK中如何改变字体
- 有谁能详细的跟我说下钩子的原理啊
- 怎样在多线程里设置定时器
- 怎样将一个文件发送到指定的信箱?能说具体一些吗?
- UNIX下的SOCKET和JAVASOCKET之间能通讯吗?
- 请教高人,我在 一台没有装SQL SERVER 2000的机器上安装SQL SERVER 2000的内核(MSDE)时为是么要重新启动机器呢?
- d:\my documents\Visual Studio Projects\ini\Config.cpp(159): error C2039: “childNodes” : 不是“IXMLDOMNode”的成员
- 二进制打开文本文件再与另外一个串异或怎么做的呀?
- 关于delete
- 断言,防御性编程与异常 大家一起讨论
有这种情况:
EV_RXCHAR事件发生了,我用ClearCommError查询字节数,cbInQue会是0,咋回事?
用MSCOMM我还没找到办法
关注
缓冲中的数据已空。应该重新用CleareCommError进行测试。
另外如果是异步读串口,ReadFile可能因另一个IO操作在进行而返回FALSE, 需要用GetOverLappedResult来获得真正读取的字节数。
EV_RXCHAR事件发生了,
我设了个循环一直读,用ClearCommError查询字节数,cbInQue一直是0
咋回事阿?
GetOverLappedResult应该是readfile以后判断拉
BOOL CXXComm::ReadComm(DWORD &dwBytesRead)
{
BYTE byBuffer[BUFFER_LENGTH];
DWORD dwError;
BOOL bRead = TRUE, bRet = FALSE;
COMSTAT comstat;
while (m_bCommOpen)
{
if (ClearCommError(m_hComm, &dwError, &comstat) && dwError > 0) //if any error
{
::PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_RXABORT);
break;
}
if (0 == comstat.cbInQue)
{
break;
}
if (bRead)
{
if (!ReadFile(m_hComm, byBuffer, BUFFER_LENGTH, &dwBytesRead, &m_ov))
{
if (GetLastError() == ERROR_IO_PENDING)
{
bRead = FALSE;
}
else
{
dwBytesRead = 0;
//error, unhandled
}
}
else
{
bRead = TRUE;
}
}
if (!bRead)
{
bRead = TRUE;
if (!GetOverlappedResult(m_hComm, &m_ov, &dwBytesRead, TRUE))
{
dwBytesRead = 0;
//error, unhandled
}
}
if (dwBytesRead > 0)
{
bRet = TRUE;
m_cs.Lock();
m_InBuffer.AddBuffer(dwBytesRead, byBuffer);
m_cs.Unlock();
}
}//while
return bRet;
}
if (dwBytesRead > 0)
{
bRet = TRUE;
m_cs.Lock();
m_InBuffer.AddBuffer(dwBytesRead, byBuffer);
m_cs.Unlock();
}
是什么意思啊?m_InBuffer,byBuffer是怎么定义的阿?谢谢!