寻求思路!也许一句话就可以点醒我!

时间:2022-03-14 18:14:45
编写了个多文档多视程序,主要是用于通过USB接口进行数据的传输,因为有的数据要实时的显示在画面上,还有用户会进行操作来申请特定的数据,所以我想做成多线程的!可是我以前没做过多线程,现在一点思路都没有!

先说一下大致情况:我已经实现了通过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这个类就可以了。

#3


可能是你在用OpenDevice的时候,系统默认有个缓冲区,会从设备读出几些数据,
而在CloseDevice的时候,系统又会把缓冲区中的数据写回去。
你可以看看有没有设置缓冲区的函数,把它设成0就应该不会有这样的事了。

#4


up

#5


gz

#6


我做过USB口的AD开发,用的是两个线程,一个线程采集,放入一个缓冲区,采完一次后把此缓冲区用memcpy拷贝到一个临时缓冲区,另一个线程从此缓冲区读取数据并作图。如果只用一个会被冲掉的。

#7


恩,你可以看看有用消费者问题的算法来做。

#8


谢谢各位大虾的指点!
我的程序和下边设备连接后,每隔1秒或几百毫秒就会询问一次下边设备,这个功能是固定的!
用户还可能会随时点击程序的菜单来执行一些特殊的功能,当然这些功能也是通过USB口来实现的,所以一定要考虑USB口的使用问题!我想用临界区或互斥来实现!难道真的不用多线程吗!

BTW:目前我很菜 :(

#1


up

#2


因为USB接口是独占的,就是每次只能够有一个线程对其进行操作,
所以这部分是没必要作成多线程的。

将USB读写部分封装成一个类, 加一个共享锁就可以了。

其它的线程要访问USB, 直接CALL这个类就可以了。

#3


可能是你在用OpenDevice的时候,系统默认有个缓冲区,会从设备读出几些数据,
而在CloseDevice的时候,系统又会把缓冲区中的数据写回去。
你可以看看有没有设置缓冲区的函数,把它设成0就应该不会有这样的事了。

#4


up

#5


gz

#6


我做过USB口的AD开发,用的是两个线程,一个线程采集,放入一个缓冲区,采完一次后把此缓冲区用memcpy拷贝到一个临时缓冲区,另一个线程从此缓冲区读取数据并作图。如果只用一个会被冲掉的。

#7


恩,你可以看看有用消费者问题的算法来做。

#8


谢谢各位大虾的指点!
我的程序和下边设备连接后,每隔1秒或几百毫秒就会询问一次下边设备,这个功能是固定的!
用户还可能会随时点击程序的菜单来执行一些特殊的功能,当然这些功能也是通过USB口来实现的,所以一定要考虑USB口的使用问题!我想用临界区或互斥来实现!难道真的不用多线程吗!

BTW:目前我很菜 :(