在Qt中寻找PostMessage功能

Jes*_*son 5 c++ qt multithreading

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

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

jke*_*ian 7

看看QTimer :: singleShot.在您的情况下,您希望使用msec值为的值0,该值应提供相同的功能.(这通常用于实现延迟初始化,直到GUI事件循环运行)


Fra*_*eld 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));
Run Code Online (Sandbox Code Playgroud)

QueuedConnection在事件循环中对其进行排队,DirectConnection将立即执行它.