ACE_Task::putq 的使用

函数的原型:

 

template <ACE_SYNCH_DECL> ACE_INLINE int

ACE_Task<ACE_SYNCH_USE>::putq (ACE_Message_Block *mb, ACE_Time_Value *tv)

 

 

putq 所作的动作是将 mb所对应的message 的指针挂在了ACE_Task::msg_queue_的尾部。没有实际的复制动作。所以必须保证mb对应的对象在ACE_Task的生命周期内不会被析构,才能保证putq这个动作是有效的。参考下面的例子。

 

 

 

tt.putq(&mb21);

 

 此时插入mb21不会出错。但是当tt.getq执行的时候,mb21实际已经析构

 使得tt中的ACE_Message_Queue中的chain断裂,信息丢失。pmb22,pmb13虽被

 插入,但是不会被get到。所以最后输出是

 

 if (2 == i)
{
 tt.putq(pmb13);
}
等待输出完毕,重新插入“close”使程序结束。

 

 

有new 创建的ACE_Message_Block 插入ACE_Task后,在ACE_Task析构的时候一起析构。所以不用担心会造成内存泄露,也不要在程序结尾再delete.

尽量使用new的方式创建ACE_Message_Block并插入ACE_Task.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值