GTK+ 多线程

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该信号即可。

常用的函数:

1.1 创建自定义的信号: g_signal_new()/g_signal_newv()

1.2 发射信号: g_signal_emit() /g_signal_emit_byname()/ g_signal_emitv()

函数详细说明:且听下回分解

样例代码:且听下回分解

2) 使用 g_idle_add

 这个是异步机制,在gtk空闲时执行添加的callback函数

本人认为该机制适用于需要长时间,并优先级不高的操作

函数详细说明:且听下回分解

样例代码:且听下回分解


3) 使用 g_timeout_add()/g_timeout_add_full().

需要定时去作某件事,则可以用该组函数

函数详细说明:且听下回分解

样例代码:且听下回分解


posted on 2013-10-14 11:54  存在的存在  阅读(425)  评论(0编辑  收藏  举报

导航