【问题标题】:Passing data between threads (non main thread to OS main thread) in GTK4在 GTK4 中的线程(非主线程到 OS 主线程)之间传递数据
【发布时间】:2022-11-04 12:49:52
【问题描述】:

我正在使用 GTK4 构建一个 GTK 应用程序。我对如何在 GTK 中的线程之间传递一些数据感到困惑。具体来说,我正在详细介绍这个问题。

我有一个服务器和一个客户端模块,客户端根据从服务器接收到的数据显示 UI。 UI 相关操作发生在 GTK 事件循环运行的 OS 主线程上。而与服务器的通信发生在非主线程上。在某些时候,服务器可能会向客户端发送一些更新。更新将在通信线程(即非主线程)上接收。由于目的是根据接收到的信息更新 UI(修改 UI 或创建新窗口),因此信息应以某种方式传递到运行事件循环的 OS 主线程。

在 GTK4 中如何在线程之间传递信息(主线程到非主线程,反之亦然)?

我故意避免使用 g_idle_add / g_idle_timeout,因为它会持续或定期运行该函数。我正在寻找一些支持 GTK 的消息传递机制,而无需构建自己的消息传递系统。

【问题讨论】:

    标签: c++ gtk


    【解决方案1】:

    传递给 g_idle_add 的回调需要返回TRUE/G_SOURCE_CONTINUEFALSE/G_SOURCE_REMOVE。后者将在第一次调用后从主循环中删除该函数,因此它不会连续运行。

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 2011-09-04
      • 2018-01-30
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多