Win32 API有一個PostMessage
函數,該函數將消息發佈到GUI消息隊列的末尾,稍後將從GUI線程處理,而不是SendMessage
,它發送並處理與調用線程。在Qt中尋找PostMessage功能
是否有PostMessage
功能的Qt解決方案?一位同事建議Qt的服務器/套接字實現可以提供它;這是一個合理的方法嗎?
Win32 API有一個PostMessage
函數,該函數將消息發佈到GUI消息隊列的末尾,稍後將從GUI線程處理,而不是SendMessage
,它發送並處理與調用線程。在Qt中尋找PostMessage功能
是否有PostMessage
功能的Qt解決方案?一位同事建議Qt的服務器/套接字實現可以提供它;這是一個合理的方法嗎?
看看QTimer::singleShot。在你的情況下,你想要使用它的值0
,它應該提供相同的功能。 (這通常用於實現延遲初始化,直到GUI事件循環運行)
到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會立即執行。
到目前爲止所有的答案都很好,我只想補充一點,您還可以使用connect()
和Qt::QueuedConnection
作爲連接類型。
我接受這個答案,因爲它緊密模擬PostMessage,這就是我所問的。但是,我決定使用jkerian的解決方案(QTimer :: singleShot),因爲它更適合於Qt的信號/插槽。感謝你們兩位! – 2010-10-14 21:37:53