相当于Win32 PostMessage()的GTK
我正在将Win32应用程序移植到C中的GTK+应用程序 UI向另一个(非UI)库注册回调。库在需要用户提供一些附加信息时调用回调。用户界面提示用户输入,然后在用户输入请求的信息后调用另一个库“setinfo”调用。UI无法阻止等待用户输入的库回调 在Windows中,这是通过回调将自定义消息发布到主窗口并立即返回来处理的。主窗口将显示一个对话框来收集用户输入,应用时将通过“setinfo”将此信息向下推相当于Win32 PostMessage()的GTK,gtk,gtk3,Gtk,Gtk3,我正在将Win32应用程序移植到C中的GTK+应用程序 UI向另一个(非UI)库注册回调。库在需要用户提供一些附加信息时调用回调。用户界面提示用户输入,然后在用户输入请求的信息后调用另一个库“setinfo”调用。UI无法阻止等待用户输入的库回调 在Windows中,这是通过回调将自定义消息发布到主窗口并立即返回来处理的。主窗口将显示一个对话框来收集用户输入,应用时将通过“setinfo”将此信息向下推 在GTK中实现这一点的等效或首选机制是什么?也就是说,如何发布某种自定义消息或事件,从而导致
在GTK中实现这一点的等效或首选机制是什么?也就是说,如何发布某种自定义消息或事件,从而导致一个对话框从GTK的主线程中运行并快速返回回调线程?因此,您有了UI和外部库L。我认为正确的解决方案如下:
gtk\u dialog\u run()
,这会使对话框处于模态,但会阻塞LL.setinfo()
对我有效的解决方案是 在回调线程中:
g_idle_add(MyPromptFunction, someData);
return;
这将返回到库。然后,主ui线程调用MyPromptFunction,从中我可以显示我的对话框,收集所需信息,并通过SetInfo()将其重新提交到库中。这是否可行?如果我在库回调线程的上下文中创建对话框,当我调用gtk_widget_show_all(dlg)时,我会遇到以下崩溃:“xcb_io.c:140:dequeue_pending_request:Assertion`req==dpy->xcb->pending_requests”失败。如果我在其他内容(例如,单击菜单)的上下文中调用此对话框创建,它工作正常。