glib学习笔记
g_main_loop 基础用法
-
+
首页
g_main_loop 基础用法
```cpp /* g_main_loop 基础用法 */ int main(int argc, char const *argv[]) { /* 1.创建一个 GMainLoop 结构体对象,作为一个主事件循环 */ GMainLoop *loop = g_main_loop_new(NULL, FALSE); /* 2.添加超时事件源 */ g_timeout_add(1000, count_down, NULL); g_timeout_add(8000, cancel_fire, loop); /* 3.添加空闲函数,没有更高优先级事件时,空闲函数就可以被执行 */ g_idle_add(say_idle, NULL); /* 4.循环检查事件源中是否有新事件进行分发,当某事件处理函数调用 g_main_loop_quit(),函数退出 */ g_main_loop_run(loop); /* 5.减少loop引用计数,如果计数为0,则会释放loop资源 */ g_main_loop_unref(loop); return 0; } ``` ```cpp /* * FALSE,该事件源将被删除 * TRUE,该事件源会在没有更高优先级事件时,再次运行 */ gboolean count_down(gpointer data) { static int count = 10; if (count < 1) { printf(">>> count_down() return FALSE\n"); return FALSE; } printf(">>> count_down() %4d\n", count--); return TRUE; } gboolean cancel_fire(gpointer data) { GMainLoop *loop = data; printf(">>> cancel_fire() quit \n"); g_main_loop_quit(loop); return FALSE; } gboolean say_idle(gpointer data) { printf(">>> say_idle() idle \n"); return TRUE; } ``` gcc $(pkg-config --cflags glib-2.0) test.c $(pkg-config --libs glib-2.0) -o test g_main_loop 基础用法 此案例中,我们一共添加了 3 个事件,包括 2 个超时事件源,一个空闲函数。主循环g_main_loop_run不停地检查是否有新事件发生。**各个事件源处理函数,如果返回值为 FALSE,则该事件源会被删除。如果返回值为 TRUE,则事件源一直存在
admin
2025年11月19日 20:45
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码