OSRefTable使用

如何将一个对象关联到OSRefTable中?

OSRefTable中维护了OSRefHashTable变量。
创建一个对象,这个对象内部要包含一个key即可。key的类型为StrPtrLen,同时要有一个OSRef变量,并在该变量初始化时将StrPtrLen初始化到OSRef即可。
这样通过OSRef既能查找到key,又能引用到该对象的this,同时还能获取引用计数。

“`
class A
{
public:
A(char* uid):m_ref(StrPtrLen(uid),this){}
OSRef m_ref;

void GetRefCount()
{
    printf("ref count:%d\n",m_ref.GetRefCount());
}

};

int main()
{

Init();

char *pUid = "aaaaaaaaaaaaaaaaaaaaaaa";
StrPtrLen ptrId(pUid);

A a(pUid);

OSRefTable table;
if (table.Resolve(&ptrId) == NULL)
{
    //注册
    table.Register(&a.m_ref);
}


for (int i =0; i < 10 ; i++)
{
    OSMutexLocker locker(table.GetMutex());
    //引用计数增加1
    OSRef*pRef = table.Resolve(&ptrId);

    //获取对象this指针,调用成员函数
    ((A*)pRef->GetObjectPtr())->GetRefCount();
    //printf("osref count:%d\n",pRef->GetRefCount());
}

while(1)
{
    OSMutexLocker locker(table.GetMutex());
    int ncount = a.m_ref.GetRefCount();
    printf("============count:%d\n",ncount);
    if (ncount > 0)
    table.Release(&a.m_ref);

    if (ncount == 0)
    {
        table.UnRegister(&a.m_ref);
        break;
    }


}


int iii = 0;

“`这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值