2013-11-15 37 views
0

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

+0

通过不使用基于计时器的轮询,而是每次有东西需要读取时唤醒您的应用程序的其他通知机制? – peppe

回答

1

这里有几点需要注意。

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

无论如何这都会很慢,但如果您的驱动程序位于您的下方,而且速度更快,那么它可能不会成为问题。这是因为驱动程序的执行速度要快得多,可能有几个ping的未完成读取,并且只保留一个缓冲区以供您读取。但是,您的应用程序需要尽可能快地获取数据,并且计时器可能太慢,因此在您的数据可用时发送事件对象可能会更好。

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

然后,您可以获取一个事件,通知您应用程序的业务部分从该缓冲区中获取数据。