pjlib中的list用法,节点采用pj内存池动态创建
来源:互联网 发布:丽都时时彩源码 编辑:程序博客网 时间:2024/06/07 14:45
#include <pjlib.h>
#include <pj/types.h>
struct my_node
{
//此行必须声明在struct的首行(声明了链表的next,prev指针)
PJ_DECL_LIST_MEMBER(struct my_node);
//下面为my_node的真正内容
pj_str_t value;
};
int param_log_decor = PJ_LOG_HAS_NEWLINE | PJ_LOG_HAS_TIME |PJ_LOG_HAS_MICRO_SEC;
/*
*list用法,节点采用pj内存池动态创建
*/
int main()
{
pj_status_t rc;
pj_caching_pool cp;
pj_pool_t * pool;
struct my_node list;
struct my_node *it,*it1;
int i;
//初始化pjlib,必须!
rc = pj_init();
//设置log级别
pj_log_set_level(5);
pj_log_set_decor(param_log_decor);
//创建pool factory,必须!后续内存分配、动态创建,需要
pj_caching_pool_init(&cp,&pj_pool_factory_default_policy,0);
//创建内存池,池名称test
pool=pj_pool_create(&cp.factory,"test",4000,4000,NULL);
//初始化空的list
pj_list_init(&list);
//创建10个节点
for (i=0; i<10; ++i) {
//内存池动态分配50个字符
char * buf = pj_pool_alloc(pool, 50);
memset(buf,0,sizeof(buf));
sprintf(buf,"Hello %d",i);
//PJ_LOG(3, ("list1", "buf:%s", buf));
//内存池动态分配my_node
struct my_node *newNode=pj_pool_alloc(pool,sizeof(struct my_node));
newNode->value =pj_str("");
pj_cstr(&newNode->value,buf);
PJ_LOG(3, ("list1", "set value:%.*s",newNode->value.slen,newNode->value.ptr));
pj_list_insert_before(&list, newNode);
}
//显示list的各节点内容
it = list.next;
while (it != &list) {
PJ_LOG(3, ("list1", "value = %.*s", it->value.slen, it->value.ptr));
it = it->next;
}
//删除所有节点
it = list.next;
while (it != &list) {
it1=it->next; //先保存下个节点地址
pj_list_erase(it); //删除当前节点
it=it1; //指向下个节点
}
//list应该为空了
pj_assert( pj_list_empty(&list) );
//释放内存池
pj_pool_release( pool );
pj_caching_pool_destroy( &cp );
pj_shutdown();
return 0;
};
#include <pj/types.h>
struct my_node
{
//此行必须声明在struct的首行(声明了链表的next,prev指针)
PJ_DECL_LIST_MEMBER(struct my_node);
//下面为my_node的真正内容
pj_str_t value;
};
int param_log_decor = PJ_LOG_HAS_NEWLINE | PJ_LOG_HAS_TIME |PJ_LOG_HAS_MICRO_SEC;
/*
*list用法,节点采用pj内存池动态创建
*/
int main()
{
pj_status_t rc;
pj_caching_pool cp;
pj_pool_t * pool;
struct my_node list;
struct my_node *it,*it1;
int i;
//初始化pjlib,必须!
rc = pj_init();
//设置log级别
pj_log_set_level(5);
pj_log_set_decor(param_log_decor);
//创建pool factory,必须!后续内存分配、动态创建,需要
pj_caching_pool_init(&cp,&pj_pool_factory_default_policy,0);
//创建内存池,池名称test
pool=pj_pool_create(&cp.factory,"test",4000,4000,NULL);
//初始化空的list
pj_list_init(&list);
//创建10个节点
for (i=0; i<10; ++i) {
//内存池动态分配50个字符
char * buf = pj_pool_alloc(pool, 50);
memset(buf,0,sizeof(buf));
sprintf(buf,"Hello %d",i);
//PJ_LOG(3, ("list1", "buf:%s", buf));
//内存池动态分配my_node
struct my_node *newNode=pj_pool_alloc(pool,sizeof(struct my_node));
newNode->value =pj_str("");
pj_cstr(&newNode->value,buf);
PJ_LOG(3, ("list1", "set value:%.*s",newNode->value.slen,newNode->value.ptr));
pj_list_insert_before(&list, newNode);
}
//显示list的各节点内容
it = list.next;
while (it != &list) {
PJ_LOG(3, ("list1", "value = %.*s", it->value.slen, it->value.ptr));
it = it->next;
}
//删除所有节点
it = list.next;
while (it != &list) {
it1=it->next; //先保存下个节点地址
pj_list_erase(it); //删除当前节点
it=it1; //指向下个节点
}
//list应该为空了
pj_assert( pj_list_empty(&list) );
//释放内存池
pj_pool_release( pool );
pj_caching_pool_destroy( &cp );
pj_shutdown();
return 0;
};
0 0
- pjlib中的list用法,节点采用pj内存池动态创建
- PJLIB内存池
- PJLIB 内存池实现
- 动态修改内存中的站点地图节点
- 动态创建css节点
- 动态创建input节点
- jstree动态创建节点
- libc: ../src/pj/os_core_unix.c:692: pj_thread_this: assertion "!"Calling pjlib from unknown/external
- PJLIB库基础框架-初始化与缓冲池和内存池的使用
- EffctiveC++.10 用list创建内存池
- 动态创建list控件
- 基于指针来实现的采用节点的简单list
- 删除list中的一个节点
- Javascript动态创建 style 节点
- Javascript动态创建/删除节点
- jQuery动态创建节点元素
- jquery动态创建dom节点
- Dom节点动态创建案例
- Parking lot
- 在线编辑类软件的试用
- ZOJ Problem Set
- [51nod] 1013 3的幂的和 [逆元][水题]
- 数据库多表左连接
- pjlib中的list用法,节点采用pj内存池动态创建
- 【4月20日】使用requests登陆教务处网站并查询课表
- ActionContextCleanUp过滤器
- VI/VIM几种快速搜索功能
- 内存泄漏
- OSI七层模型
- python3的爬虫算法(3) 实现自动登陆,签到
- PHP下SSL加密解密、验证、签名方法(很简单)
- 本地搭建ipV6测试环境