peakzhang 发表于 2008-7-15 23:22:21

ACE_Message_Block小知识

作者:stonejiang
ACE_Message_Block小知识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 = new ACE_Message_Block(100 ,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;
         
    }
页: [1]
查看完整版本: ACE_Message_Block小知识