2010-10-14 195 views
5

Win32 API有一個PostMessage函數,該函數將消息發佈到GUI消息隊列的末尾,稍後將從GUI線程處理,而不是SendMessage,它發送並處理與調用線程。在Qt中尋找PostMessage功能

是否有PostMessage功能的Qt解決方案?一位同事建議Qt的服務器/套接字實現可以提供它;這是一個合理的方法嗎?

回答

8
+0

我接受這個答案,因爲它緊密模擬PostMessage,這就是我所問的。但是,我決定使用jkerian的解決方案(QTimer :: singleShot),因爲它更適合於Qt的信號/插槽。感謝你們兩位! – 2010-10-14 21:37:53

7

看看QTimer::singleShot。在你的情況下,你想要使用它的值0,它應該提供相同的功能。 (這通常用於實現延遲初始化,直到GUI事件循環運行)

6

到QTimer的解決方案類似,但其優點是可以傳遞參數,是QMetaObject :: invokeMethod中的方法:

QString SomeClass::compute(const QString&, int, double); 
... 
QMetaObject::invokeMethod(obj, "compute", Qt::QueuedConnection, 
         Q_RETURN_ARG(QString, retVal), 
         Q_ARG(QString, "sqrt"), 
         Q_ARG(int, 42), 
         Q_ARG(double, 9.7)); 

的QueuedConnection隊列會在事件循環,DirectConnection會立即執行。

4

到目前爲止所有的答案都很好,我只想補充一點,您還可以使用connect()Qt::QueuedConnection作爲連接類型。