首页 > 编程语言 >详细介绍Glib 主事件循环轻度分析与编程应用

详细介绍Glib 主事件循环轻度分析与编程应用

时间:2023-04-04 13:34:12浏览次数:29  
标签:Glib glib 优先级 GMainContext 自定义 编程 循环 轻度 事件

glib 是一个跨平台、用 C 语言编写的若干底层库的集合。编写案例最好能够结合 glib 源码,方便随时查看相关函数定义。glib 实现了完整的事件循环分发机制。有一个主循环负责处理各种事件。事件通过事件源描述,常见的事件源

文件描述符(文件、管道和 socket)
超时
idle 事件
当然,也可以自定义事件源,通过 glib 提供的函数 g_source_attach() 就可以手动添加我们自定义的新类型事件源。可参考 [2.2](##2.2 案例2 glib 自定义事件源)

事件源默认会被分配一个优先级,默认为 G_PRIORITY_DEFAULT(200),数字越小,优先级越高。当然也可以在添加空闲函数(g_idle_add_full)的时候,指定该事件源的优先级。具体应用还是结合后面的示例以及源码动手实践。

1.1 glib 主事件循环涉及的重要数据结构
GMainContext

为了让多组独立事件源能够在不同的线程中被处理,每个事件源都会关联一个GMainContext。一个线程只能运行一个GMainContext,但是
————————————————
版权声明:本文为CSDN博主「极致Linux内核」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_73494896/article/details/127011228

标签:Glib,glib,优先级,GMainContext,自定义,编程,循环,轻度,事件
From: https://www.cnblogs.com/hshy/p/17286100.html

相关文章

  • glib库源码分析1
    /***g_main_loop_quit:*@loop:a#GMainLoop**Stopsa#GMainLoopfromrunning.Anycallstog_main_loop_run()*fortheloopwillreturn.**Notethatsourcesthathavealreadybeendispatchedwhen*g_main_loop_quit()iscalledwillstillbeexec......
  • COMP6451 Ethereum 编程
    UNSWCOMP6451Assignment2(version2)?EthereumProgramming(ERC-20TokenDutchAuctionMarket)TotalMarks:35DueDate:5pm,March31,2023(Distributiontothirdpartiesand/orplacementonnon-UNSWwebsitesprohibited.)BackgroundAvarietyofschemesareuse......
  • Linux c语言编程./a.out运行提示段错误
    段错误,几种可能:一、函数没有头文件(是的,有时候gcc不会提示没有头文件);二、函数重复定义,全局变量定义后、局部变量又定义了。(一般是调试的时候,代码改来改去,遗漏所致)三、Linux发行版系统差异,虽然都是Linux内核,同样的函数Ubuntu和CentOS需要的头文件就不一样,具体查看ma......
  • 窗口编程初始化
    JFramejf;Containercontainer;voidinit(){//初始化框架jf=newJFrame();jf.setSize(400,500);//将容器放在框架上获得容纳面板container=jf.getContentPane();//做其他事情//设置窗口可视化jf.setVisible(true);//设......
  • 【NOI OpenJudge】【1.4】编程基础之逻辑表达式与条件分支
    01:判断数正负#include<cstdio>#include<iostream>usingnamespacestd;intmain(){intn;cin>>n;if(n>0){printf("positive\n");}elseif(n==0){printf("zero\n");}else{pri......
  • 【NOI OpenJudge】【1.2】编程基础之变量定义、赋值及转换
    01:整型数据类型存储空间大小#include<cstdio>intmain(){ inta;shortb; printf("%d%d",sizeof(a),sizeof(b)); return0;}02:浮点型数据类型存储空间大小#include<cstdio>intmain(){ floata;doubleb; printf("%d%d",sizeof(a),sizeof(b)); return......
  • Flutter 异步编程指南
    作者:京东物流 王志明1Dart中的事件循环模型在App开发中,经常会遇到处理异步任务的场景,如网络请求、读写文件等。Android、iOS使用的是多线程,而在Flutter中为单线程事件循环,如下图所示Dart中有两个任务队列,分别为microtask队列和event队列,队列中的任务按照先进先出......
  • 如何进行SpringMVC异步编程
    前言SpringMVC是我们平时用的最多的异步编程框架,但是我们在使用的时候基本上只是用到了它的同步编程。一般情况下是够用的,但是在并发量比较大的时候可能就不会够用了,因为一个请求会占用一个tomcat线程,这个时候我们可以尝试使用异步编程的方式来提高吞吐量。环境准备maven依赖:......
  • 第十一章:网络编程
    在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。因此可以用Socket来描述网络连接的一对一关系。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种......
  • 第七章:并发编程
    第七章:并发编程目录第七章:并发编程一、并发与并行二、Go协程(Goroutine)1Go协程介绍2启动Go协程3GMP调度模型三、信道(Channel)1信道使用2死锁现象3单向信道【了解】4关闭信道5循环信道四、缓冲信道1缓冲信道2WaitGroup五、select六、mutex七、异常处理一、并发与并行并......