2013-05-03 73 views
1

我的應用程序是一個簡單的消息發送者/接收器通過TCP/IP與GUI。到目前爲止,所有東西都是單線程的,但我想將TCP/IP通信塊和GUI分割爲不同的線程。就我所見,我需要一個共享數據結構(如QQueue <QString>)在GUI線程和TCP/IP線程之間來回傳遞消息。如何在GUI線程和工作線程之間共享數據?

問題是:我在哪裏放置這個共享數據結構?如果我把它放在任何一個線程中,其他線程如何訪問它? O使用QSharedMemory之類的東西會更好嗎?

+0

您應該使用Qt的插槽和信號機制的GUI線程和工作線程之間共享數據。 – 2013-05-03 17:59:58

+0

借調...如果您必須表示新數據無論如何可能(可能),那麼只需使用信號本身來傳遞數據。如果很多數據不想複製太多,則可能轉而使用QMutex來控制對共享列表或隊列的訪問。 – darron 2013-05-03 18:06:57

+0

可能重複的[跨Qt線程共享數據](http://stackoverflow.com/questions/12372301/sharing-data-across-qt-threads) – cmannett85 2013-05-03 18:52:25

回答

0

我會親自創建一個全局Singleton旋轉緩衝區,它是線程間的共享資源。

讓「feed thread」(來自TCP/IP線程)將數據放入緩衝區。 讓您的「讀取線程」(從您的GUI)從緩衝區中提取數據。

確保您對「puts」和「gets」具有適當的鎖定以避免競爭狀況和死鎖。

約翰