关于HID函数HidD_FlushQueue的问题

80后传播者 2010-01-12 08:45:11
前两天发帖,询问以下问题:

实现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有什么用,其实现机理是什么?有知道的大侠帮忙一下,不胜感激!!

谢谢!!!
...全文
653 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
80后传播者 2010-01-14
  • 打赏
  • 举报
回复
up
用户 昵称 2010-01-12
  • 打赏
  • 举报
回复
好像好多io操作都被底层缓存起来,等待机会再写入,所以很多io操作就都提供了flush机制。

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧