2015-12-03 57 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

另一種可能是繪圖緩衝區比您需要顯示的要大一些。如果缺乏數值,則將其填滿。如果在線程中執行此操作,則可以確保數據可用性,而無需定時器或讀取就緒信號。你只需要跟蹤哪些數據已經被閱讀和及時的方向。