天天看点

ACE_Message_Block小知识

ACE_Message_Block小知识

   ------转载

    原文地址:http://www.cppblog.com/mooyee/

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);  // 处理这条消息

             }

         }  //  end while

      return   0 ;

    }

os