我希望使用cypress FX2LP进行30兆字节的USB数据传输,并同时绘制它的图表。我找到了一个涵盖这个30兆字节传输速率的策略:在读取线程中读取1兆字节数据,然后在main_thread中绘制它。但是这个策略需要1兆字节的缓冲区,我的板上没有这样的内存。
你有其他解决方案吗?
答案 0 :(得分:0)
你不需要任何线索。
将问题分解为更简单的步骤:
对于第1步 - 你不需要实际的转移内容,对吗?你只需要时间;基本上你想传输虚拟数据,把它放到/dev/null
但保存一对(nbytes_transferred, timestamp)
的列表,它们不会占用那么多内存。保存,测试/验证,然后继续执行第2步。
修改的
线程也不是绝对必要的。
避免阻塞/同步IO ;使用异步/非阻塞方法
在Java中,这意味着像NIO;在Qt中 - 可能使用QtConcurrent
和QFuture
。
几乎每个GUI工具包都基于event loop模型工作:那里有主循环滚动(通常隐藏在application.run()
调用中)这一次又一次查询事件的操作系统(例如用户按键或鼠标使用,计时器启动,[异步]网络或磁盘IO完成或进行等),然后处理或发送这些事件,最终调用您的onButton1Click
方法,然后最后睡觉,直到有更多事件需要处理。
通常还有一种挂钩onIdle
"事件"的方法,它发生在主循环静止不动之前(为了节省CPU功率和放大器)能量)。在Qt中,这是0超时QTimer
或QAbstractEventDispatcher::aboutToBlock()
回调。有关您的更多信息,请参阅this question。
如果所有这些听起来太复杂,或许请查看this library一些不错的公司在GitHub上开源。 (我刚刚在google上找到它;没有任何关系)。从源代码看,它们似乎为libusb-1.0
提供了一个不错的Qt-onic API - 您最有可能用于跨平台USB访问。哦,他们选择了0超时QTimer
方法。