【问题标题】:Looking for PostMessage functionality in Qt在 Qt 中寻找 PostMessage 功能
【发布时间】:2010-10-14 20:13:14
【问题描述】:

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

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

【问题讨论】:

    标签: c++ multithreading qt


    【解决方案1】:

    【讨论】:

    • 我接受这个答案,因为它非常模仿PostMessage,这是我问的。但是,我决定使用 jkerian 的解决方案 (QTimer::singleShot),因为它更适合 Qt 的信号/插槽。谢谢你们!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      类似于 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 作为连接类型。

        【讨论】:

          猜你喜欢
          • 2021-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 2018-09-30
          • 2019-10-20
          • 1970-01-01
          • 2013-04-27
          相关资源
          最近更新 更多