运行结果:
10
1.230000
my_k 已销毁!
my_d 已销毁!
没有找到 my_k!
5.670000
my_d 已销毁!
代码2:演示指针型私有键
#include#include #include "lu32.h" #pragma comment( lib, "lu32.lib" ) typedef struct pri_k //将注册为私有键 { int k; } pri_k; void _stdcall Del_pri_k(void *me) //销毁pri_k的函数 { free(me); } LuData _stdcall OpLock_pri_k(luINT m,LuData *Para,void *hFor,int theOperator) //pri_k的运算符重载函数 { LuData a; a.BType=luStaData_nil; a.VType=luStaData_nil; a.x=0; //不对pri_k类型的对象做运算,总返回nil return a; } #define key_lock (luPriKey_User-20) //将对该私有键加锁 #define imax 10 //私有键值最大数 void main(void) { pri_k *pk[imax],*p_k; int i; luKEY ByteNum; void *NowKey=NULL; //为避免编译器发出警告进行初始化,实际上不需要 if(!InitLu()) return; //初始化Lu LockKey(key_lock,Del_pri_k,OpLock_pri_k); //在Lu键树中加锁键,只能存储pri_k类型 for(i=0;i k=100+i; ByteNum= i%2 -1 : sizeof(luVOID); //i为偶数时注册为指针键,否则注册为非指针键 InsertKey((char *)&(pk[i]),ByteNum,key_lock,pk[i],Del_pri_k,NULL,1,NowKey); //在Lu键树中注册键值 } printf("--- 保存在Lu键树中的数据!---\n\n"); for(i=0;i k); } printf("\n--- 删除约1/3数据!---\n\n"); for(i=0;i k); else printf("没有找到第 %d 个数据!\n",i); } printf("\n--- 运行垃圾收集器后数据!---\n\n"); GC(0); //垃圾收集 for(i=0;i k); else printf("没有找到第 %d 个数据!\n",i); } printf("\n--- 解锁键并全部销毁数据!---\n\n"); LockKey(key_lock,NULL,OpLock_pri_k); //在Lu键树中解锁键 for(i=0;i k); else printf("没有找到第 %d 个数据!\n",i); } FreeLu(); //释放Lu }
运行结果:
--- 保存在Lu键树中的数据!---
100
101
102
103
104
105
106
107
108
109
--- 删除约1/3数据!---
没有找到第 0 个数据!
没有找到第 1 个数据!
没有找到第 2 个数据!
103
104
105
106
107
108
109
--- 运行垃圾收集器后数据!---
没有找到第 0 个数据!
没有找到第 1 个数据!
没有找到第 2 个数据!
没有找到第 3 个数据!
104
没有找到第 5 个数据!
106
没有找到第 7 个数据!
108
没有找到第 9 个数据!
--- 解锁键并全部销毁数据!---
没有找到第 0 个数据!
没有找到第 1 个数据!
没有找到第 2 个数据!
没有找到第 3 个数据!
没有找到第 4 个数据!
没有找到第 5 个数据!
没有找到第 6 个数据!
没有找到第 7 个数据!
没有找到第 8 个数据!
没有找到第 9 个数据!
代码3:演示非指针型私有键
将代码2中的
#define key_lock (luPriKey_User-20) //将对该私有键加锁
改为:
#define key_lock (luPoiKey_User-20) //将对该私有键加锁
然后编译运行即可。
运行结果:
--- 保存在Lu键树中的数据!---
100
102
104
106
108
--- 删除约1/3数据!---
没有找到第 0 个数据!