我正在将一个Win32应用程序移植到C中的GTK +应用程序。
UI向另一个(非ui)库注册回调。当库需要来自用户的一些额外信息时,库会调用回调。 UI提示输入用户输入,然后在用户输入所请求的信息时调用不同的库“setinfo”调用。 UI无法阻止库的回调等待用户输入。
在Windows中,这是通过回调向主窗口发布自定义消息并立即返回来处理的。主窗口将显示一个用于收集用户输入的对话框,并且应用将通过'setinfo'将此信息推回。
在GTK中完成此操作的等效或首选机制是什么?也就是说,如何发布某种自定义消息或事件,导致对话框耗尽GTK的主线程并快速返回回调线程?
答案 0 :(得分:0)
所以你有你的UI和外部库L.我认为正确的解决方案是这样的:
gtk_dialog_run()
,这会使对话框模态但阻止L。L.setinfo()
。答案 1 :(得分:0)
对我有用的解决方案是g_idle_add()。
在回调线程中:
g_idle_add(MyPromptFunction, someData);
return;
这将返回库。然后主ui线程调用MyPromptFunction从我能够显示我的对话框,收集所需信息,并通过SetInfo()重新提交到库。