首页 > 其他分享 >g_main_loop 基础用法

g_main_loop 基础用法

时间:2023-04-04 14:23:13浏览次数:44  
标签:count return 用法 事件 FALSE main loop



/* test.c */ 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; }

  

/* 
 * 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,则事件源一直存在
————————————————
版权声明:本文为CSDN博主「极致Linux内核」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_73494896/article/details/127011228

标签:count,return,用法,事件,FALSE,main,loop
From: https://www.cnblogs.com/hshy/p/17286275.html

相关文章

  • 《花雕学AI》07:AI脑洞大开-盘点最火爆人工智能ChatGPT的N多种新颖用法
    本文提纲(呵呵,想必大家都猜到了,它确实是人工智能帮我做的,看起来比较专业吧!)一、引言:介绍ChatGPT是什么,它是基于GPT-3的一个开源的多语言聊天机器人框架,可以生成流畅、有趣、有逻辑的对话。二、正文:分别介绍ChatGPT的N多种新颖用法1、用ChatGPT来写小说、诗歌、歌词等文学作品,展示它......
  • 【转】typedef的用法
    目录一、typedef的四种用法1.定义类型别名2.typedefstruct3.定义和平台无关的数据类型4.为复杂的声明顶一个简单别名二、如何理解复杂声明和定义三、右左法则四、用typedef简化复杂的声明和定义内容与参考资料基本一致,稍微修改了一点参考资料上存在的错误一、typedef的四种......
  • 【搞事】HTTP文件传输服务器搭建|网站文件分享|HFSxCHFS用法
    1、problem在学校讲台上只有一台电脑,但是下面各种(你懂的)设备,都需要去上面拷贝资源,每次就很麻烦,于是就想着能不能把这些ppt啊什么的分享出来,在下面就可以看。2、solutionHFS(HttpFileServer)是一款基于http的开源文件分享软件。官网地址:https://www.rejetto.com/hfs/?f=dlCHFS(Cute......
  • Angular 应用里 server.ts 文件的 APP_BASE_HREF token 的用法?
    Angular应用里server.ts文件,下面这段代码的含义?server.get('*',(req,res)=>{res.render(indexHtml,{req,providers:[{provide:APP_BASE_HREF,useValue:req.baseUrl}],});});在Angular应用中,server.ts文件是用于构建服务器端渲染(S......
  • Objective-C的self.用法的一些总结
    关于什么时候用全局变量,什么时候用self.赋值的问题,其实是和Objective-c的存取方法有关,网上很多人也都这么解答的,不过如何与存取方式有关究竟他们之间的是什么样的关系就很少有同学回答了。我总结了一下,发出来给大家参考.有什么问题请大家斧正. 进入正题,我们经常会在官方文......
  • Flask快速入门day02(1、CBV使用及源码分析,2、模板用法,3、请求与响应的基本用法,4、sessi
    目录Flask框架一、CBV分析1、CBV编写视图类方法二、CBV源码分析1、CBV源码问题2、补充问题3、总结三、模板1、py文件2、html页面四、请求与响应1、request常用方法2、response常用方法五、session及源码分析1、session的基本使用2、session源码分析六、闪现七、请求扩展Flask框......
  • (4.3)数组、对象及类数组对象,set的用法,正则表达式的常用方法,蓝桥杯备赛-(生成数组、数
    1.1数组、对象及类数组对象1.数组:​ 数组是有序的数据集合,其中的索引值从0开始递增,并且数组有length属性,可以获取数组内的元素个数,其中的值可以是任何的数组类型。2.对象:​ 对象是无序的是由一个或多个键值对组成的数据集合,对象没有length属性。3.伪数组(类数组对象):​ ......
  • addr2line用法
    addr2linecommandinLinuxwithExamples https://www.geeksforgeeks.org/addr2line-command-in-linux-with-examples/使用addr2line命令定位到行号解析.so的文件 https://www.jianshu.com/p/7e41cb9050c1addr2line动态库[通俗易懂] https://cloud.tencent.com/developer......
  • SQL: Join的用法
    在SQL中,JOIN是将两个或多个表中的行连接起来的方法。JOIN的基本思想是将两个表中的数据按照某些条件进行匹配,然后将匹配的结果合并成一个新的表。常见的JOIN类型有INNERJOIN、LEFTJOIN、RIGHTJOIN和FULLOUTERJOIN。INNERJOININNERJOIN是最常用的JOIN类型,它......
  • xcode4.2中使用xib来运行hello world (MainWindow.xib)
    xcode4.2推荐使用storyboard,但网上资料太少,书上讲的也都是基于xib的 花了2天时间,终于把xib的helloWorld写出来了。 注意,类名一定要大写,为了这个东西,我搞了2天,在配viewContorller时一直抛错。 新建EmptyApplication 添加一个object,添加一个ViewController,添加一个window,把Fi......