美文网首页
glib之main event loop(核心应用支持)

glib之main event loop(核心应用支持)

作者: 一凡_44e0 | 来源:发表于2019-05-06 17:10 被阅读0次

    主事件循环

    描述

    主事件循环(main event loop)管理所有的glib和gtk+应用的消息源。这些消息源来自多种类型的的如文件描述符(文件,管道,套接字)和超时。
    为了让多种独立的消息集合在不通的线程中被处理,每一种消息源被GMainContext关联。一个GMainContext能够在一个线程中运行,而且消息源能被添加和移除从别的线程。
    每个事件消息源都有默认的优先级,默认的优先级是G_PRIORITY_DEFAULT,是0,小于0的标识高优先级,大于0的标志低优先级。高优先级级的消息源有限被处理。
    空闲函数可以被添加,分配优先级,当没有更高优先级的事件被处理时,这些空函数运行。
    GMainLoop 数据类型代表一个主事件循环,一个GMainLoopb被g_main_loop_new()创建。在添加初始化事件后,g_main_loop_run()被调用,不断的检测各种事件源并且派发。最后,处理一个来自g_main_loop_quit()的消息后,退出主事件循环,g_main_loop_run() 返回。

    自定义新的事件源

    GMainLoop功能的一个不同寻常的功能是除了内置类型的事件源之外,还可以创建和使用新类型的事件源。新事件源类型用于处理GDK事件。通过从GSource结构派生来创建新的源类型。派生类型的源由一个结构表示,该结构具有GSource结构作为第一个元素,以及特定于新源类型的其他元素。要创建新源类型的实例,请调用派生结构的大小和函数表。这些GSourceFuncs确定新源类型的行为。g_source_new()新的源类型基本上以两种方式与主上下文交互。它们在GSourceFuncs中的准备函数可以设置超时,以确定主循环在再次检查源之前将休眠的最长时间。此外,或者,源也可以将文件描述符添加到主上下文使用的集合中 g_source_add_poll()。

    自定义主事件循环迭代

    可以运行 GMainContext的单次迭代g_main_context_iteration()。在某些情况下,需要更详细地控制主循环的细节如何工作,例如,将GMainLoop与外部主循环集成时。在这种情况下,您可以g_main_context_iteration()直接调用组件功能 。这些功能是 g_main_context_prepare(),g_main_context_query(), g_main_context_check()和g_main_context_dispatch()。

    image.png

    相关文章

      网友评论

          本文标题:glib之main event loop(核心应用支持)

          本文链接:https://www.haomeiwen.com/subject/xmfhoqtx.html