gtk2中gtk_idle_add()和gtk_main_context_invoke()有什么区别?

问题描述 投票:0回答:1

我有一个通过调用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);

此功能是否更适合我的应用程序,还是应该使用完全不同的功能将事件从工作线程传输到主线程?

c multithreading gtk glib gtk2
1个回答
0
投票

这些功能是等效的。 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,但此特定功能不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.