ACE_Message_Block小知识

本文介绍了ACE_Message_Block的使用方法,包括如何复制数据而不移动写指针、如何正确初始化及移动写指针、如何避免创建环形链接以及如何利用特定类型来通知线程结束等关键知识点。

*ACE_Message_Block小知识*
http://spaces.msn.com/stonejiang/blog/cns!A4A8B7175059E42A!273.entry
   ** **   1 copy() 不需要让写指针后移.
   ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);
   mb->copy(buff); //buff先已经初始化
2 初始化mb后需要后移指针的情况
   2.1
   ACE_Message_Block* mb = new ACE_Message_Block(buff,len);
   mb->wt_ptr(len);   //len是buff的长度 len = strlen(buff) +1
                              // +1 表示后面的/0
   2.2
   ACE_Message_Block* mb = new ACE_Message_Block(BUFSIZ);
   ACE_OS::sprintf(mb->wt_ptr(),buff);
   mb->wt_ptr(len);
   2.3
   ACE_Message_Block* mb = new ACE_Message_Block(len,
                  ACE_Message_Block::MB_DATA,
                  mb2,    //表示 mb->cont(mb2)
                  buff)
   mb->wt_ptr(len);
3.让消息接成串cont()时,千万不要直接或接间的把它接成一个环
     mb->cont(mb2);
     mb2->cont(mb3); //ok
     ***mb3->cont(mb);   //死定了
4.通知其它线程结束时,可以通过ACE_Message_Block::MB_STOP
   ACE_Message_Block* lastMsg =ACE_Message_Block ,ACE_Message_Block::MB_STOP)
   otherTask->putq(lastMsg);
   otherTask在接收到的时候如下处理
     int OtherTask::svc()
     {
               ACE_Message_Block* mb;
                 while(1)
                 {
                    getq(mb);
                  if(mb->get_tpye() == ACE_Message_Block::MB_STOP)
                 {
                     mb->release();
                     break; //退出这个永久限环)
                 }
                 else
                 {
                     handle_message(mb); //处理这条消息
                 }
     return 0;
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值