首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >usb高速数据传输的最佳方式是什么?

usb高速数据传输的最佳方式是什么?
EN

Stack Overflow用户
提问于 2017-12-21 21:24:16
回答 1查看 109关注 0票数 0

我想有30兆字节的USB数据传输使用cypress FX2LP,并同时绘制它的图表。我发现了一种覆盖这个30兆字节传输速率的策略:在读线程中读取1兆字节数据,然后在main_thread中绘制它。但是这个策略需要1兆字节的缓冲区,而我的主板上没有这样的内存。

你有其他的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-21 21:55:41

你不需要任何线程来做这件事。

将你的问题分解成更简单的步骤:

  1. 如何测量和收集所需的数据?
  2. 如何绘制数据?

对于第一步-您不需要实际的传输内容,不是吗?您只需要计时;基本上,您希望传输虚拟数据,将其放入/dev/null中,但保存一列成对的(nbytes_transferred, timestamp),这不会占用太多内存。保存它,测试/验证,然后继续实施步骤2。

编辑

线程对于平滑的UI也不是绝对必要的。

您所要做的就是避免阻塞/同步IO;使用异步/非阻塞方法。

在Java中,这意味着类似于NIO;在Qt中--可以使用QtConcurrentQFuture

实际上,每个图形用户界面工具包都是基于event loop模型工作的:有一个主循环滚动(通常隐藏在application.run()调用中),它一次又一次地向操作系统查询事件(如用户按键或鼠标使用、计时器触发、异步网络或磁盘IO完成或进展等),然后处理或分派这些事件,最终调用onButton1Click方法,最后进入休眠状态,直到有更多事件需要处理。

通常,还有一种方法可以挂接到onIdle“事件”,该事件发生在主循环进入休眠状态之前(以节省CPU的功率和能量)。在Qt中,这要么是0超时回调,要么是QAbstractEventDispatcher::aboutToBlock()回调。有关您更喜欢的内容,请参阅this question

如果这一切听起来太复杂了,也许你可以看看在GitHub上开源的一些不错的公司的this library。(我刚刚在谷歌上找到了它;没有任何从属关系)。从源代码上看,他们似乎为libusb-1.0提供了一个很好的USB你很可能会用它来进行跨平台的访问。哦,他们选择了0-timeout QTimer方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47925961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档