在Qt中寻找PostMessage功能

时间:2010-10-14 20:13:15

标签: c++ multithreading qt

Win32 API有一个PostMessage函数,它将消息发布到GUI消息队列的末尾,以便稍后从GUI线程处理,而不是SendMessage发送和处理消息同步与调用线程。

是否有PostMessage功能的Qt解决方案?同事建议Qt的服务器/套接字实现可以提供它;这是一种合理的方法吗?

4 个答案:

答案 0 :(得分:8)

答案 1 :(得分:7)

看看QTimer::singleShot。在您的情况下,您希望将msec0用于{{1}},这应该提供相同的功能。 (这通常用于实现延迟初始化,直到GUI事件循环运行)

答案 2 :(得分: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将立即执行它。

答案 3 :(得分:4)

到目前为止所有答案都很好,我只想补充一点,你也可以使用connect()Qt::QueuedConnection作为连接类型。