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


被折叠的 条评论
为什么被折叠?



