![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Glib
文章平均质量分 72
Glib没有系统性学习,目前是学习Gstreamer和Gtk过程中,遇到Glib知识点记录
李尔阳
这个作者很懒,什么都没留下…
展开
-
十三、GIO GTask
GTask表示管理一个可取消的“任务task”原创 2023-02-15 20:36:41 · 761 阅读 · 1 评论 -
十二、GIO GSettings
GSettings类提供了一个方便的API来存储和检索应用程序设置。读写可以被认为是非阻塞的。使用GSettings读取设置通常是非常快的:在大致相同的数量级上(但比)GHashTable查找要慢。写入设置在返回应用程序的时间方面也非常快,但对于其他线程和其他进程来说可能非常昂贵。许多设置后端(包括dconf)具有延迟初始化,这意味着在通常情况下,用户使用他们的计算机而不修改任何设置,可以避免许多工作。对于dconf,在这种情况下甚至不需要启动D-Bus服务。原创 2023-02-12 17:47:50 · 673 阅读 · 0 评论 -
十一、Gio Resource
(自gdk-pixbuf 2.32起已弃用),它将使用gdk-pixbuf-pixdata命令将图像转换为GdkPixdata格式,这允许您直接使用资源文件中的数据创建pixbufs,而不是它的(未压缩)副本。一旦创建并注册了GResource,就可以在进程中使用API调用(如g_resources_open_stream())来访问数据流或g_resources_lookup_data()来获得数据的直接指针,从而全局访问其中的所有数据。理想情况下,斜杠后面的路径应该是绝对的,但这不是严格要求的。原创 2023-02-05 10:57:32 · 597 阅读 · 0 评论 -
十、GkeyFile
1 Ini配置文件 程序没有任何配置文件,那么它对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,为了让程序出厂后还能根据需要进行必要的配置,所以要用配置文件;配置文件有很多种,如INI配置文件,XML配置文件,cfg配置文件,还有就是可以使用系统注册表等。 INI就是英文“initialization”的头三个字母的缩写;当然INI file的后缀名也不一定是“.ini”也可以是“.cfg”,“.conf”,".txt"。windows系统中,也存在这类文件,通常后缀名“.原创 2021-09-28 18:06:35 · 399 阅读 · 0 评论 -
九、GOptionEntry
#include <gst/gst.h>int main(int argc, char *argv[]){ GstElementFactory *factory; gst_init(&argc, &argv); factory = gst_element_factory_find("fakesrc"); if(!factory){ g_print("You don't have the 'fackesrc' element in原创 2021-09-24 08:48:24 · 104 阅读 · 0 评论 -
八、GIO Channels
1 基本概念 IO Channels由GIOChannel结构描述,被GLib封装,必须通过公共函数来访问它的各个成员。每个IO Channel和一个文件或者类似于文件的对象相联系,在Linux上,IO Channel可以和打开文件描述符,套接字,管道如此以后就可以像访问文件一样操作IO Channels。 每个IO Channel上可以关联一些事件及其相应函数(watch),这个挂接在主循环上,于是乎,当事件来临之后,消息相应便可动作。1.1 套接字(Socket) 对网络中不同主机上的应用原创 2021-09-23 09:16:51 · 843 阅读 · 0 评论 -
七、GLib主要的事件循环(The Main Event Loop)
1 GMainLoop、GMainContext、GSource1.1 三者之间关系GMainLoop -> GMainContext -> {GSource1, GSource2,GSource3… }每个GMainLoop都包含一个GMainContext成员,而这个GMainContext成员可以装各种各样的GSource,GSource则是具体的各种Event处理逻辑了。在这里,可以把GMainContext理解为GSource的容器,但是它的用处不只是装GSouce。创建GM原创 2021-09-23 09:16:31 · 1780 阅读 · 1 评论 -
六、GLib线程
1线程和进程1.1 基本概念 进程是系统进行资源分配和调度的一个独立单位。 线程运行在进程中,线程是进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不用有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器、栈),但是他可与同属一个进程的其他线程共享进程所拥有的全部资源。1.2 关系 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他原创 2021-09-15 08:46:13 · 878 阅读 · 0 评论 -
五、双端队列Double-ended Queues
1 队列、栈和堆的基本知识1.1栈内存(先进后出) 栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在函数中的都是局部变量,函数外的是全局变量,for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。 限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其原创 2021-09-13 11:16:53 · 186 阅读 · 0 评论 -
五、GLib库双向链表
1 双链表结构体typedef struct _GList GList;struct _GList{ gpointer data; GList *next; GList *prev;};2 代码#include <stdio.h>#include <stdlib.h>#include <glib.h>static gintsort(gconstpointer p1, gconstpointer p2){ gint32 a, b;原创 2021-09-12 17:48:25 · 179 阅读 · 0 评论 -
四、Glib库单链表
1 单链表结构体typedef struct _GSList GSList;struct _GSList{ gpointer data; GSList *next;};2 单链表相关函数总结2.1.1 链表末尾插入元素GSList* g_slist_append (GSList *list, gpointer data);list:一个单链表data:一个数据的指针Note:该函数会遍历链表到末尾,插入元素,最后返回原创 2021-09-12 16:41:03 · 961 阅读 · 0 评论 -
三、宏调试
1 宏调试1.1 警告前提条件检查:#include <glib.h>g_return_if_fail(condition)g_return_val_if_fail(condition, retval)这个宏列表列出了 g l i b的预条件检查宏。对g_return_if_fail,如果条件为假,则打印一个警告信息并且从当前函数立刻返回。g_return_val_if_fail与前一个宏类似,但是允许返回一个值。毫无疑问,这些宏很有用 — 如果大量使用它们,特别是结合 G t k转载 2021-09-10 09:03:30 · 700 阅读 · 0 评论 -
二、Quarks
1 GQuark概念Quark:字符串和数字之间建立一一对应的联系。通过Quark定义的数字就可以检索出字符串,或者通过字符串就可以找到Quark定义的数字。typedef guint32 GQuark;/*1.创建quark*/GQuark g_quark_from_string (const gchar *string); /*创建一个字符串拷贝*/GQuark g_quark_from_static_string (const gchar *string); /*使用原字符串地址*//*2原创 2021-09-10 08:51:26 · 284 阅读 · 0 评论 -
一、GValue
1 共用体 我C语言使用union比较少,所以先回顾一下共用体的知识。结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。例如:union _data{ guint32 n; guint16 m; guint8 ch;}; 共享内存结构如图 如果先设置 m = 0x00F0,在设置 ch = 0x0F ,结果不是m = 0x00FF,而是 m = 0x000F,赋值某一个成员,都会清空全部内存,在赋值这一成员原创 2021-09-09 18:47:54 · 909 阅读 · 0 评论