相当于Win32 PostMessage()的GTK

时间:2012-06-27 22:07:28

标签: gtk gtk3

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

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

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

在GTK中完成此操作的等效或首选机制是什么?也就是说,如何发布某种自定义消息或事件,导致对话框耗尽GTK的主线程并快速返回回调线程?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

在回调线程中:

g_idle_add(MyPromptFunction, someData);
return;

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