我有一个通过调用 g_thread_new() 生成工作线程的应用程序。工作线程必须将进度信息或可能发生的错误发送到基于接收到的数据更新 GUI 的主线程。
目前我正在使用:
gtk_main_context_invoke(NULL, (GSourceFunc)update_gui, data);
第一个参数(GMainContext* 类型)等于 NULL,在主循环上下文中运行 update_gui(),以便工作人员可以继续执行实际工作。
在浏览文档时我发现了一个函数:
guint g_idle_add (GSourceFunc function, gpointer data);
此函数是否更适合我的应用程序,或者我应该使用完全不同的函数将事件从工作线程传输到主线程?
最佳答案
这些功能是等效的。 g_main_context_invoke()
是 g_idle_add()
的包装器,如果在当前线程拥有的 GMainContext
上调用,它可以避免消息传递的需要(您的示例中并非如此,但无害)。
请注意,该函数是 g_main_context_invoke()
,而不是 gtk_main_context_invoke()
。据我所知,后者并不存在。同样,它是 g_idle_add()
而不是 gtk_idle_add()
。
g_main_context_invoke()
和 g_idle_add()
都是由 GLib 提供的,而不是 GTK 提供的。 GTK 使用 GLib,但此特定功能不需要。
关于c - gtk2中的gtk_idle_add()和gtk_main_context_invoke()有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60532500/