GTK equivalent of Win32 PostMessage()



我正在将Win32应用程序移植到C语言中的GTK+应用程序。

UI 向另一个(非 ui)库注册回调。 当库需要用户提供一些额外的信息时,它会调用回调。 UI 提示用户输入,然后在用户输入请求的信息时调用不同的库"setinfo"调用。 UI 无法阻止库的回调,等待用户输入。

在 Windows 中,这是由回调处理的,将自定义消息发布到主窗口并立即返回。 主窗口将显示一个对话框来收集用户输入,并在应用时通过"setinfo"将此信息推送回去。

在GTK中实现此目的的等效或首选机制是什么? 也就是说,如何发布某种自定义消息或事件,导致对话框从 GTK 的主线程中运行并快速返回到回调线程?

所以你有你的UI,和外部库L。我认为正确的解决方案是这样的:

  1. 在第一个回调中,L 调用 UI 时,您会弹出一个 GtkDialog。
  2. 您不调用 gtk_dialog_run() ,这将使对话框成为模态,但块 L。
  3. 当对话框生成响应信号时,您可以解析它并回调到 L.setinfo() 中。
  4. 关闭对话框。

对我有用的解决方案是 g_idle_add()。

在回调线程中:

g_idle_add(MyPromptFunction, someData);
return;

这将返回到库。然后,主 UI 线程调用 MyPromptFunction,从中我可以显示我的对话框,收集所需的信息,并通过 SetInfo() 将其重新提交到库。

最新更新