GTK+ 多线程

这篇博客探讨了在GTK+ 3.6之后,如何在多线程环境中避免使用gdk_thread_enter()和gdk_thread_leave()进行线程同步,并提出了三种替代方法:1) 利用信号机制进行同步;2) 使用g_idle_add进行异步操作;3) 通过g_timeout_add*/g_timeout_add_full*进行定时操作。这些方法在处理主线程UI元素时能提高性能并避免错误。
摘要由CSDN通过智能技术生成

GTK+ 多线程操作

操作 UI 元素时,早期一般都是使用gdk_thread_enter() / gdk_thread_leave() 来进行线程间同步。

但是 GTK+ 3.6 开始,不建议使用该函数对。仔细考虑下,似乎有些道理。频繁的调用 gdk_thread_enter() / gdk_thread_leave()确实影响 GTK+ 的性能,并且容易出现莫名的错误。但是,如何解决在多线程环境下,

其他线程对主UI元素的操作呢?有以下常用的 3 个方法:

1) 使用 signal 机制

这也是一种同步机制,我们需要在主线程添加自定义的信号和该信号的callback函数,

并连接该信号到一个 gobject 上去。在其他线程emit该信号即可。

常用的函数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值