我将首先说我有工作代码。。。但这并不能使它成为理想的代码,这就是为什么我想让社区运行我的方法。我试着用"QT方式"来做这件事,这迫使我走上平时不走的路。
我有一些400多mb的大二进制文件,其中包含原始时变数据。我需要将这些数据绘制给用户,以便数据播放与录制的持续时间相匹配。我有一种使用QTimer.timeout触发文件读取的工作方法。我读取x个字节,当读取完成时,我会发出一个信号来触发绘图操作。通过调整我的超时时间,我可以在不阻塞接口的情况下控制绘图速率(不阻塞GUI是关键)。这似乎有效,但对于像文件这样简单的东西来说,感觉过于复杂
当我通过TCP接收流中的数据时,我可以使用socket.readReady信号来告诉我何时处理数据。由于数据是按时间顺序到达的,因此它自然会直接出现在TCP流上。
我基本上已经通过使用fread和发射信号复制了套接字的readReady。这听起来合理吗?
另一种选择是使用QFile::map()函数将要显示的右侧数据片段映射到内存中,以便在不读取任何文件的情况下直接访问。我想这应该足够快,可以根据切片大小进行快速显示。这种方法可以与上面的缓冲方法相结合,以避免过度映射。这意味着映射一个比当前需要的更大的切片。
另一种选择可能是打印缓冲区比您需要显示的缓冲区大一些。如果它缺少值,你就把它填满。如果在线程中执行此操作,则可以确保数据可用性,而无需定时器或读取就绪信号。您只需要跟踪哪些数据已经被读取,以及时间的方向。