多程序同时与同一USB设备通信问题

wflishh 2011-04-25 10:30:03
 问题:有一USB设备,方式是HID,读取方式是,分别用CreateFile建立读和写的独立通道。向USB发送一条指令,反回一条执行结果,即每个writefile 之后必须 readfile 一次。
  但是当我打开同一个程序的两个实例时。即A与B,同时与USB进行通信。此时我发现,A或者B发送一条命令能USB时,USB反回的数据,都存在于A和B的驱动队列中。此时如果A再writefile之后,再readfile可能读到B通信时USB反回来的数据。
即做如下定义,
A第一次发送数据为:A_w_1,读取数据回来时为,A_r_1,
B第一次发送数据为:B_w_1,读取数据回来时为,B_r_1,

即当我同时与USB进行通信时。先
A_w_1
A_r_1

B_w_1时。此时读取出来的数据为A_r_1再读取一次数据才会是B_r_1

请问这种情况下,我如何知道readfile里面那条才是我需要的数据?驱动读队列中有还存在几条数据?


...全文
266 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wflishh 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yuqangy 的回复:]
用线程池的非IO管理或是自己定制一个线程池,也会出现这种状况吗?
[/Quote]

我A与B不是同时进行操作。所以与互斥无关。即,我前一分钟用A读写数据。后一分钟用B读取数据。
结果就你如我上面所诉的情况发生。
用户 昵称 2011-04-25
  • 打赏
  • 举报
回复
那你说解决不了就想别的办法吧。
wflishh 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jennyvenus 的回复:]
弄个量吧。
[/Quote]
互斥解决不了这个问题,只两同时打开两个实例,收到的数据两个程序队列中都会存大,除非用互斥不允许打开两个实例。
用户 昵称 2011-04-25
  • 打赏
  • 举报
回复
弄个互斥量吧。
鄢老 2011-04-25
  • 打赏
  • 举报
回复
现用临界区域或互斥去做吧:
A写完数据,且读出USB回复的字符串时,B才能占用USB
yuqangy 2011-04-25
  • 打赏
  • 举报
回复
用线程池的非IO管理或是自己定制一个线程池,也会出现这种状况吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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