关于HID函数HidD_FlushQueue的问题
前两天发帖,询问以下问题:
实现HID设备与PC的双向通信。目前设备已识别,而且可以正常通信。读写数据的代码如下:
memcpy(&wBuffer[1], m_writebuff, min(32, m_writebuff.GetLength()));
if(WriteFile(hidHandle, wBuffer, 33, &dwRet,NULL))
{
//写成功
Sleep(2000);
if(ReadFile(hidHandle, rBuffer, 33, &dwRet, NULL))
{
//读成功
memcpy(str, &rBuffer[1], min(32, strlen((char *)&rBuffer[1])));
m_readbuff=str;
UpdateData(false);
}
else
MessageBox("读失败!");
MessageBox("读写成功!");
}
else
MessageBox("写失败!");
但是必须得有Sleep(2000);一句,否则读出的数据就是“旧值”,需要读好几次才能读到“新值”。也就是说先用WriteFile写数据,马上用ReadFile读数据是不行的,需要延迟。而且我已测明不是hid设备慢,因为使用一个软件读写该设备可以实现“即写即读”。请问这是什么原因?怎么解决?
一位高手建议在WriteFile后面调用函数HidD_FlushQueue,结果果然奏效,但是不知其所以然,在这里刷新handle的buffer有什么用,其实现机理是什么?有知道的大侠帮忙一下,不胜感激!!
谢谢!!!