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

标签 c multithreading gtk glib gtk2

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

相关文章:

改变C中cmd窗口的背景颜色?

c - 访问任意地址,不会出现段错误

c - S 曲线运动曲线(电机速度 v/s 时间)

c# - Windows服务/WCF和线程,初学者问题

java - java HttpServer 类向/从 java HttpHandler 类传递数据的正确方法

c - undefined reference : linking libraries when compiling a simple GTK+ 3. 0 Windows 上的 C 程序

将嵌套循环转换为递归

C++多线程Windows GUI(访问表单)

c - gdk/gdk.h : No such file or directory

opengl - 是否有可能破解 GTK 渲染到 OpenGL 纹理