GLIB: The Main Event Loop

主事件循环机制(MEL:the Main Event Loop)在GLib和GTK应用中管理可用的事件源。事件源的类型包括:文件描述符(管道、套接字和常规文件)和定时器超时。

  • guint g_source_attach (GSource* source, GMainContext* context)。往GMainContext中注册一个新的事件源GSource,不用考虑GMainContext的线程。如果context为NULL,即全局默认的主上下文。成功返回时,返回值为该事件源在GMainContext中的ID号。
  • void g_source_destory(GSource* source)。将事件源GSource从上次注册的GMainContext中注销,注销后该事件源不可以再注册到任何其他上下文中。

不相关的事件源组可以被不同的线程处理,每个事件源关联一个GMainContext。虽然一个GMainContext只能运行在一个线程之中,而事件源可以在其他线程中注册或注销。所有操作GMainContext或内建GSource的方法都是线程安全的。

每个事件源都有一个优先级。默认的优先级G_PRIORITY_DEFAULT为0。优先级越高,数值越小。优先级高的事件源可以获得优先处理。

空闲函数,可以注册到GMainContext,也被分配一个优先级数值。当没有任何更高级别的事件源时,线程就运行空闲函数。

数据类型GMainLoop表示一个主事件循环。

  • GMainLoop* g_main_loop_new ( GMainContext* context, gboolean is_running )。创建一个数据结构GMainLoop。
  • void g_main_loop_run ( GMainLoop* loop ),该函数在调用g_source_attach之后运行,一旦运行该函数就会持续检查新的事件并分发给事件源处理函数。
  • void g_main_loop_quit ( GMainLoop* loop ),导致g_main_loop_run退出,一般在事件源处理函数中调用。

一个新型事件源类型都是GSource结构派生出来。

  • GSource* g_source_new ( GSourceFuncs* source_funcs, guint struct_size ),创建一个新的GSource事件源;其中GSourceFuncs是该事件源的处理函数指针,struct_size是在原生GSource结构体基础上需要扩展的内存长度。

主事件循环机制的有限状态机:

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值