先说一下大致情况:我已经实现了通过USB接口进行数据的收发了,我的USB设备每包数据大小为64个字节,就是说Writefile和readfile每次写或读的最大数据包是64字节!每次发数据之前:用OpenDevice打开USB设备接口,先writefile,然后在Readfile,最后在CloseHandle,这样可以实现数据收发!每次收发数据打开一次USB设备接口,就是调用一次OpenDevice,在最后调用CloseHandle关闭,可是在打开和关闭接口之间会先有若干个Writefile(每个writefile最多写64字节)来发出几百字节信息、然后有若干个readfile(每个readfile最多读64字节)来执行以获取几百个字节的信息,可我得怎么设计多线程啊!实在是搞不清楚了!而且USB接口是独占的,就是每次只能够有一个线程对其进行操作!
请各位大虾出手啊!
8 个解决方案
#1
up
#2
因为USB接口是独占的,就是每次只能够有一个线程对其进行操作,
所以这部分是没必要作成多线程的。
将USB读写部分封装成一个类, 加一个共享锁就可以了。
其它的线程要访问USB, 直接CALL这个类就可以了。
所以这部分是没必要作成多线程的。
将USB读写部分封装成一个类, 加一个共享锁就可以了。
其它的线程要访问USB, 直接CALL这个类就可以了。
#3
可能是你在用OpenDevice的时候,系统默认有个缓冲区,会从设备读出几些数据,
而在CloseDevice的时候,系统又会把缓冲区中的数据写回去。
你可以看看有没有设置缓冲区的函数,把它设成0就应该不会有这样的事了。
而在CloseDevice的时候,系统又会把缓冲区中的数据写回去。
你可以看看有没有设置缓冲区的函数,把它设成0就应该不会有这样的事了。
#4
up
#5
gz
#6
我做过USB口的AD开发,用的是两个线程,一个线程采集,放入一个缓冲区,采完一次后把此缓冲区用memcpy拷贝到一个临时缓冲区,另一个线程从此缓冲区读取数据并作图。如果只用一个会被冲掉的。
#7
恩,你可以看看有用消费者问题的算法来做。
#8
谢谢各位大虾的指点!
我的程序和下边设备连接后,每隔1秒或几百毫秒就会询问一次下边设备,这个功能是固定的!
用户还可能会随时点击程序的菜单来执行一些特殊的功能,当然这些功能也是通过USB口来实现的,所以一定要考虑USB口的使用问题!我想用临界区或互斥来实现!难道真的不用多线程吗!
BTW:目前我很菜 :(
我的程序和下边设备连接后,每隔1秒或几百毫秒就会询问一次下边设备,这个功能是固定的!
用户还可能会随时点击程序的菜单来执行一些特殊的功能,当然这些功能也是通过USB口来实现的,所以一定要考虑USB口的使用问题!我想用临界区或互斥来实现!难道真的不用多线程吗!
BTW:目前我很菜 :(
#1
up
#2
因为USB接口是独占的,就是每次只能够有一个线程对其进行操作,
所以这部分是没必要作成多线程的。
将USB读写部分封装成一个类, 加一个共享锁就可以了。
其它的线程要访问USB, 直接CALL这个类就可以了。
所以这部分是没必要作成多线程的。
将USB读写部分封装成一个类, 加一个共享锁就可以了。
其它的线程要访问USB, 直接CALL这个类就可以了。
#3
可能是你在用OpenDevice的时候,系统默认有个缓冲区,会从设备读出几些数据,
而在CloseDevice的时候,系统又会把缓冲区中的数据写回去。
你可以看看有没有设置缓冲区的函数,把它设成0就应该不会有这样的事了。
而在CloseDevice的时候,系统又会把缓冲区中的数据写回去。
你可以看看有没有设置缓冲区的函数,把它设成0就应该不会有这样的事了。
#4
up
#5
gz
#6
我做过USB口的AD开发,用的是两个线程,一个线程采集,放入一个缓冲区,采完一次后把此缓冲区用memcpy拷贝到一个临时缓冲区,另一个线程从此缓冲区读取数据并作图。如果只用一个会被冲掉的。
#7
恩,你可以看看有用消费者问题的算法来做。
#8
谢谢各位大虾的指点!
我的程序和下边设备连接后,每隔1秒或几百毫秒就会询问一次下边设备,这个功能是固定的!
用户还可能会随时点击程序的菜单来执行一些特殊的功能,当然这些功能也是通过USB口来实现的,所以一定要考虑USB口的使用问题!我想用临界区或互斥来实现!难道真的不用多线程吗!
BTW:目前我很菜 :(
我的程序和下边设备连接后,每隔1秒或几百毫秒就会询问一次下边设备,这个功能是固定的!
用户还可能会随时点击程序的菜单来执行一些特殊的功能,当然这些功能也是通过USB口来实现的,所以一定要考虑USB口的使用问题!我想用临界区或互斥来实现!难道真的不用多线程吗!
BTW:目前我很菜 :(