2015-12-03 56 views
0

我会先说我有工作代码......但这并不是理想的代码,这就是为什么我想要由社区运行我的方法。我试图做到这种“QT方式”,这种方式迫使我停下我通常不会去的路。在Python中使用QTimer流式传输大数据文件

我有一些包含原始时间变量数据的大型400 + mb二进制文件。我需要将此数据绘制到用户,以便数据回放与录制的持续时间相匹配。我有一个使用QTimer.timeout来触发文件读取的工作方法。我读了x字节的数量,当读取完成时,我发出一个信号来触发绘图操作。通过调整我的超时时间,我可以控制绘图的速度而不会阻塞我的界面(不阻止GUI是关键)。这似乎工作,但它感觉像一个file.read一样简单的过于复杂。

当我通过TCP接收数据流时,我可以使用socket.readReady信号告诉我何时处理数据。由于数据在时间上连续到达,所以它自然地看起来正好在TCP流上。

我基本上使用fread和发射信号重复了一个套接字的readReady。这听起来像一个合理的方法?

回答

0

另一种方法是使用QFile :: map()函数将右侧数据片映射到内存中,以便直接访问而不需要读取任何文件。我想这应该足够快,以根据切片大小快速显示。这种方法可以与上面的缓冲方法相结合以避免过度映射。这将意味着映射当前所需的更大的片。

+0

好主意,我会研究这个。 – deltatango

0

另一种可能是绘图缓冲区比您需要显示的要大一些。如果缺乏数值,则将其填满。如果在线程中执行此操作,则可以确保数据可用性,而无需定时器或读取就绪信号。你只需要跟踪哪些数据已经被阅读和及时的方向。