Glib学习(2)——main loop

【上一篇】thread


简介

主事件循环——管理所有可用的事件源

主事件循环管理GLib和GTK+应用程序的所有可用事件源。这些事件可以来自任意数量的不同类型的源,比如文件描述符(纯文件、管道或套接字)和超时。还可以使用g_source_attach()添加新类型的事件源。

为了允许在不同的线程中处理多个独立的源集,每个源都与一个GMainContext相关联。GMainContext只能在单个线程中运行,但是可以向其添加源,并从其他线程中删除源。所有在GMainContext或内置GSource上操作的函数都是线程安全的。

每个事件源被分配一个优先级。默认优先级G_PRIORITY_DEFAULT为0。值小于0表示优先级更高。大于0的值表示较低的优先级。来自高优先级源的事件总是在来自低优先级源的事件之前处理。

GMainLoop数据类型表示主事件循环。GMainLoop使用g_main_loop_new()创建。添加初始事件源之后,将调用g_main_loop_run()。这将持续检查来自每个事件源的新事件并分派它们。最后,对来自其中一个源的事件的处理导致调用g_main_loop_quit()以退出主循环,然后g_main_loop_run()返回。

可以递归地创建新的GMainLoop实例。这经常在GTK+应用程序中显示模态对话框时使用。注意,事件源与一个特定的GMainContext相关联,并且将被检查和分派与那个GMainContext相关联的所有主循环。

包含文件

#include <glib.h>

类型

 	GMainLoop
#define	G_PRIORITY_HIGH
#define	G_PRIORITY_DEFAULT
#define	G_PRIORITY_HIGH_IDLE
#define	G_PRIORITY_DEFAULT_IDLE
#define	G_PRIORITY_LOW
#define	G_SOURCE_CONTINUE
#define	G_SOURCE_REMOVE

 	GMainContext
typedef	GMainContextPusher
typedef	GPid
#define	G_PID_FORMAT
struct	GPollFD
#define	G_POLLFD_FORMAT
struct	GSource
struct	GSourceFuncs
struct	GSourceCallbackFuncs

几个函数介绍


g_main_loop_new ()

GMainLoop *
g_main_loop_new (GMainContext *context,
                 gboolean is_running);

描述:创建一个新的GMainLoop structure.

参数:

  • context:GMainContext (如果为 NULL, 会使用默认的上下文).
  • is_running:true表示循环正在运行。并不是很重要,因为调用g_main_loop_run() 时会将其设为TRUE

返回值:

一个新的GMainLoop.


g_main_loop_run ()

void
g_main_loop_run (GMainLoop *loop);

描述:

运行后将一直阻塞,直到运行 g_main_loop_quit() 终止循环。如果为循环的GMainContext的线程调用该函数,它将处理循环中的事件,否则(函数参数为空)它将只是等待。


g_main_loop_quit ()

void
g_main_loop_quit (GMainLoop *loop);

描述

停止GMainLoop运行。任何对g_main_loop_run()的循环调用都将返回。注意,调用g_main_loop_quit()时已经分派的源仍然会执行。

[参考]

g_main_loop_new (NULL, FALSE) 原理分析
The Main Event Loop

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值