GLib基础

实用功能

GLib中包含了近二十种实用功能,从简单的字符处理到初学者很难理解的XML解析功能,这里介绍两种较简单的:随机数和计时。

下面代码演示如何产生1-100之间的随机整数和演示如何计算30000000次累加在计算时用的时间:

 1 /* until.c 用来测试实用功能 */
 2 #include <glib.h>
 3 int    main(int argc, char *argv[])
 4 {
 5     GRand *rand;
 6     GTimer *timer;
 7     
 8     gint n;
 9     gint i, j;
10     gint x = 0;
11     rand = g_rand_new();    //创建随机数对象
12     for(n=0; n<20; n++)
13     {    //产生随机数并显示出来
14         g_print("%d\t",g_rand_int_range(rand,1,100));
15     }
16     g_print("\n");
17     g_rand_free(rand);    //释放随机数对象
18     //创建计时器
19     timer = g_timer_new();
20     g_timer_start(timer);//开始计时
21     for(i=0; i<10000; i++)
22         for(j=0; j<3000; j++)
23             x++;//累计
24     g_timer_stop(timer);//计时结束
25     //输出计时结果
26     g_print("%ld\tall:%.2f seconds was used!\n",x,g_timer_elapsed(timer,NULL));
27 }

数据类型

GLib中定义了十几种常用的数据结构类型和它们的相关操作函数,下面是关于字符串类型的简单示例:

 1 #include <glib.h>
 2 int    main(int argc, char *argv[])
 3 {
 4     GString *s;
 5     s = g_string_new("Hello");
 6     g_print("%s\n", s->str);
 7     s = g_string_append(s," World!");
 8     g_print("%s\n",s->str);
 9     s = g_string_erase(s,0,6); //从字符串中删除字符
10     g_print("%s\n",s->str);
11     s = g_string_prepend(s,"Also a ");
12     g_print("%s\n",s->str);
13     
14     s = g_string_insert(s,6," Nice");
15     g_print("%s\n",s->str);
16 }

GLib提供了一种内存块(GMemChunk)数据类型,它为分配等大的内存区提供了一种非常好用的操作方式,下面程序演示了内存块数据类型的简单用法:

 1 #include <glib.h>
 2 int    main(int argc, char *argv[])
 3 {
 4     GMemChunk *chunk;    //定义内存块
 5     gchar *mem[10];    //定义指向原子的指针数组
 6     gint i, j;
 7     //创建内存块
 8     chunk = g_mem_chunk_new("Test MemChunk", 5, 50, G_ALLOC_AND_FREE);
 9                 //名称,原子的长度, 内存块的长度,类型
10     for(i=0; i<10; i++)
11     {
12         //创建对象
13         //mem[i] = g_chunk_new(gchar, chunk);
14         mem[i] = (gchar*)g_mem_chunk_alloc(chunk);
15         for(j=0; j<5; j++)
16         {
17             mem[i][j] = 'A' + j;//为内存块中的指针赋值
18         }
19     }
20     
21     g_mem_chunk_print(chunk);    //显示内存块信息
22     for(i=0; i<10; i++)
23     {
24         g_print("%s\t",mem[i]);//显示内存块中的内容
25     }
26     
27     for(i=0; i<10; i++)
28     {
29         g_mem_chunk_free(chunk,mem[i]); //释放所有分配的内存
30     }
31     g_mem_chunk_destroy(chunk);
32 }

我们在程序中分配的是50字节的空间,而实际用的是80字节,由此可以看出其在分配内存时本身用到了部分内存空间。

从上面的示例代码 中可以看出,在GLib中几乎所有的对象都是C语言的结构类型,一般命名以大写字母G开头的单词,如GList表示双向链表,所有与之相关的操作函数都以 小写的字母g加下划线加小写的单词加下划线开头,如以g_list_*开头的函数都是与这相关的操作函数,而且这些函数中的第一个参数多数是此对象的指 针。

GLIB中的数据类型在GLIB本身,尤其是GTK+中频繁用到,了解掌握这些数据类据类型的用法是非常必要的,这对进一步灵活开发GTK+程序来说是关键一环,而且是对大学中的《数据结构》一科的很好回顾。

posted @ 2016-01-24 20:03  喵星supercat  阅读(301)  评论(0)    收藏  举报