glib中gthread的应用---数据类型


数据类型

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


Makefile文件如下:

#include <glib.h>
int	main(int argc, char *argv[])
{
	GString *s;
	s = g_string_new("Hello");
	g_print("%s\n", s->str);
	s = g_string_append(s," World!");
	g_print("%s\n",s->str);
	s = g_string_erase(s,0,6);
	g_print("%s\n",s->str);
	s = g_string_prepend(s,"Also a ");
	g_print("%s\n",s->str);
	
	s = g_string_insert(s,6," Nice");
	g_print("%s\n",s->str);
}
	CC = gcc
all:
	$(CC) `pkg-config --cflags --libs glib-2.0 ` string.c -o str
	

下面是输出结果:

Hello
Hello World!
World!
Also a World!
Also a Nice World!

字符串在编程中出现频率之高,即使是初学者也很清楚,追加、删除和插入等常用操作理解后,还可以进一步了解掌握其它更复杂的操作。

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

#include <glib.h>
int	main(int argc, char *argv[])
{
	GMemChunk *chunk;	//定义内存块
	gchar *mem[10];	//定义指向原子的指针数组
	gint i, j;
	//创建内存块
	chunk = g_mem_chunk_new("Test MemChunk", 5, 50, G_ALLOC_AND_FREE);
				//名称,原子的长度, 内存块的长度,类型
	for(i=0; i<10; i++)
	{
		//创建对象
		//mem[i] = g_chunk_new(gchar, chunk);
		mem[i] = (gchar*)g_mem_chunk_alloc(chunk);
		for(j=0; j<5; j++)
		{
			mem[i][j] = 'A' + j;//为内存块中的指针赋值
		}
	}
	
	g_mem_chunk_print(chunk);	//显示内存块信息
	for(i=0; i<10; i++)
	{
		g_print("%s\t",mem[i]);//显示内存块中的内容
	}
	
	for(i=0; i<10; i++)
	{
		g_mem_chunk_free(chunk,mem[i]); //释放所有分配的内存
	}
	g_mem_chunk_destroy(chunk);
}

Makefile文件件如下:

CC = gcc
all:
	$(CC) `pkg-config --cflags --libs glib-2.0` data1.c -o data1
	

以下为输出结果:

GLib-INFO: Test MemChunk: 80 bytes using 2 mem areas
ABCDE	ABCDE	ABCDE	ABCDE	ABCDE	ABCDE	ABCDE	ABCDE	ABCDE	ABCDE

这里说明这一数据类型的原因是通过它可以他细体会内存分配这一运行时处理环节的应用之妙。

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

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

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

在下一篇GOBJECT对象系统中将详细介绍GLIB中最重要的组成部分GOBJECT系统,希望这一由C语言组建的单继承的对象系统会帮助你走进GTK+的世界。


参考链接:

 http://www.ibm.com/developerworks/cn/linux/l-glib/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值