我想有30兆字节的USB数据传输使用cypress FX2LP,并同时绘制它的图表。我发现了一种覆盖这个30兆字节传输速率的策略:在读线程中读取1兆字节数据,然后在main_thread中绘制它。但是这个策略需要1兆字节的缓冲区,而我的主板上没有这样的内存。
你有其他的解决方案吗?
发布于 2017-12-21 21:55:41
你不需要任何线程来做这件事。
将你的问题分解成更简单的步骤:
对于第一步-您不需要实际的传输内容,不是吗?您只需要计时;基本上,您希望传输虚拟数据,将其放入/dev/null中,但保存一列成对的(nbytes_transferred, timestamp),这不会占用太多内存。保存它,测试/验证,然后继续实施步骤2。
编辑
线程对于平滑的UI也不是绝对必要的。
您所要做的就是避免阻塞/同步IO;使用异步/非阻塞方法。
在Java中,这意味着类似于NIO;在Qt中--可以使用QtConcurrent和QFuture。
实际上,每个图形用户界面工具包都是基于event loop模型工作的:有一个主循环滚动(通常隐藏在application.run()调用中),它一次又一次地向操作系统查询事件(如用户按键或鼠标使用、计时器触发、异步网络或磁盘IO完成或进展等),然后处理或分派这些事件,最终调用onButton1Click方法,最后进入休眠状态,直到有更多事件需要处理。
通常,还有一种方法可以挂接到onIdle“事件”,该事件发生在主循环进入休眠状态之前(以节省CPU的功率和能量)。在Qt中,这要么是0超时回调,要么是QAbstractEventDispatcher::aboutToBlock()回调。有关您更喜欢的内容,请参阅this question。
如果这一切听起来太复杂了,也许你可以看看在GitHub上开源的一些不错的公司的this library。(我刚刚在谷歌上找到了它;没有任何从属关系)。从源代码上看,他们似乎为libusb-1.0提供了一个很好的USB你很可能会用它来进行跨平台的访问。哦,他们选择了0-timeout QTimer方法。
https://stackoverflow.com/questions/47925961
复制相似问题