我是靠谱客的博主 冷傲路人,最近开发中收集的这篇文章主要介绍Glib官方文档阅读 The Main Event Loop,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

头文件

#include <glib.h>

描述

主事件循环管理GLibGTK+应用程序的所有可用事件源。这些事件可以来自任何数量的不同类型来源,如文件描述符(普通文件、管道或套接字)和超时。也可以使用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 相关联的所有主循环进行检查和调度。
GTK+ 包含其中一些函数的包装器,例如gtk_main(), gtk_main_quit()gtk_events_pending()

创建新的源类型

GMainLoop功能的不寻常特性之一是,除了内置类型的事件源之外,还可以创建和使用新类型的事件源。一种新的事件源类型用于处理 GDK 事件。通过从GSource结构“派生”来创建新的源类型。源的派生类型由具有GSource结构作为第一个元素和其他特定于新源类型的元素的结构表示。要创建新源类型的实例,请调用 g_source_new()传递派生结构的大小和函数表。这些GSourceFuncs确定新源类型的行为。
新的源类型基本上以两种方式与主上下文交互。他们在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()

主上下文的状态

在这里插入图片描述

在 UNIX 上,GLib 主循环与fork()是不相容的. 任何使用主循环的程序都不应该在子进程中使用exec()exit()来返回。

源的内存管理

最后

以上就是冷傲路人为你收集整理的Glib官方文档阅读 The Main Event Loop的全部内容,希望文章能够帮你解决Glib官方文档阅读 The Main Event Loop所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部