API时间分辨率限制USB带宽?

时间:2013-11-15 21:45:19

标签: qt timer usb

我有一个设备可以控制用USB发送数据的速度。我正在使用Qt进行数据的PC端处理。我经常根据计时器从设备中读取数据。问题是记录计时器的分辨率只有1毫秒。这不会限制我将数据读取到1ms的速度吗?如果这个定时器太慢,我该如何利用USB大容量带宽功能呢?

1 个答案:

答案 0 :(得分:1)

这里有几点需要注意。

首先,如果您需要超过15毫秒的分辨率,用户模式下的定时器分辨率非常糟糕。例如,在Windows中,如果您设置定时器或仅睡眠1毫秒,实际时间将达到约15-17毫秒。

无论如何,这都会很慢,但如果你有一个低于你的驱动程序可以更快地获取数据,它可能不会出现问题。这是因为驱动程序正在以更快的速度执行,可能有一些ping长期未完成的读取,只需保持一个缓冲区已满,供您读取。但是应由您的应用程序尽可能快地获取数据,并且计时器可能太慢,在您的数据可用时发出事件对象可能更好。

其次,使用WinUSB和libusb,现在有更多的控制和用户模式需要发出读取,驱动程序只是内核模式通过。在这种情况下,您应该创建一个线程,除了读取并将数据提供给应用程序中的本地缓冲区之外什么都不做。与内核模式类似,您总是希望读取未完成,只需等待数据进入。

然后,您可以发出一个信号,告诉应用程序的业务部分从该缓冲区中获取数据。