0

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

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

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

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

4

2 回答 2

0

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

  1. 在第一个回调中,L 调用 UI,您会弹出一个 GtkDialog。
  2. 您不调用gtk_dialog_run(),这会使对话框模态但会阻止 L。
  3. 当对话框生成响应信号时,您对其进行解析并回调到L.setinfo().
  4. 你关闭对话框。
于 2012-06-29T10:25:35.757 回答
0

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

在回调线程中:

g_idle_add(MyPromptFunction, someData);
return;

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

于 2013-06-14T23:00:35.410 回答