2010-05-29 58 views
4

我有一個Qt/C++應用程序,通常的GUI線程和一個網絡線程。網絡線程正在使用一個外部庫,它有自己的基於select()的事件循環...所以網絡線程沒有使用Qt的事件系統。Qt跨線程調用

目前,網絡線程只是在發生各種事件(如連接成功)時發出()s信號。我認爲這可以正常工作,因爲信號/插槽機制正確地爲GUI線程發佈信號。

現在,我需要網絡線程能夠調用GUI線程來提出問題。例如,網絡線程可能要求GUI線程請求建立一個對話框來請求密碼。

有沒有人知道這樣做的適當機制?

我現在最好的想法是讓網絡線程在發送一個對象後使用QWaitCondition等待(emit passwordRequestedEvent(passwordRequest);。passwordRequest對象將在特定的QWaitCondition上有一個句柄,所以可以在做出決定時發出信號。 。

是這種明智的做法?還是有其他的選擇嗎?

回答

6

使用信號線之間發送消息是好的,如果你不喜歡使用的條件變量,那麼您可以在這兩個發送信號方向或多或少的異步方式:如果您希望在等待GUI響應時繼續處理網絡內容,這可能是更好的選擇。