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+程序来说是关键一环,而且是对大学中的《数据结构》一科的很好回顾。

浙公网安备 33010602011771号