2013-03-07 90 views
0

我有一個Qt應用程序,它可以獲取串行數據並且顯示在儀表板類型的GUI中。該方案的基本結構如下:Qt GUI在Windows XP上無響應

EDIT 的SerialPort(從QIODevice繼承)對象獲得創建並具有連接到其槽readyRead信號。 當新數據進入時,它會通過消息處理程序解釋並通過程序發送。最終,數據進入GUI層,並顯示給用戶。

該程序在Windows 7中運行正常,但是當我在松下韌體上運行它,運行Windows XP時,程序開始很好,但過了一會兒GUI停止更新。我的意思是,當新數據進入時,gui不會重新繪製,直到用戶單擊按鈕或調整大小。我想知道這種行爲有哪些可能的原因。我認爲這可能是因爲所有串行數據進入主線程,但我認爲GUI運行在一個單獨的線程無論如何。我錯了嗎?有沒有人有任何想法可能會發生什麼?

+0

不確定。 GUI線程輸入隊列過載的症狀通常是點擊/調整大小/移動停止工作,而不是使應用程序正常工作。 – 2013-03-07 19:36:10

回答

0

如果SerialPortIO不在其自己的線程中,那麼它可能在等待新數據時被阻塞。我沒有使用過那個特定的Serial類,但是一般來說,數據流可能應該在它自己的線程中。

您可以通過定期調用qApp->processEvents()來強制程序更新GUI,並更新GUI。

此外,在代碼中放置一些qDebug語句,特別是在您懷疑調用過於頻繁或不足的函數頂部。

使用以下命令行,這使得它很容易遵循什麼是在多線程應用程序發生:

qDebug() << Q_FUNC_INFO; 

希望有所幫助。

+0

對不起,這個類被稱爲SerialPort - 它繼承了QIODevice ..我會做出這些改變,我會嘗試你的建議 – PTBG 2013-03-07 19:49:26