您的位置:ACE 开发者 >> 论坛 >> ACE基础应用 >> 查看帖子
字体: 小 中 大
peakzhang 发表于: 2008-1-15 21:46 来源: ACE 开发者
CODE:
#ifndef _ACE_MESSAGE_BLOCK_MANAGER #define _ACE_MESSAGE_BLOCK_MANAGER #include "Config.h" class CMsgMgr { public: CMsgMgr() {}; virtual ~CMsgMgr(){}; public: void Init( int msgsize = 1024, int msgnum = 2048 ); void Release(); ACE_Message_Block * AllocMsg( void ); private: ACE_Recursive_Thread_Mutex _lock; ACE_Allocator * msg_allocator_; ACE_Allocator * data_allocator_; ACE_Allocator * buff_allocator_; }; ACE_Message_Block * CMsgMgr::AllocMsg( void ) { ACE_Message_Block *msg; ACE_NEW_MALLOC_RETURN( msg, static_cast<ACE_Message_Block*>( msg_allocator_->malloc(sizeof( ACE_Message_Block ) ) ), ACE_Message_Block( 1024,0,0,0,buff_allocator_,0,0,ACE_Time_Value::zero,ACE_Time_Value::max_time,data_allocator_,msg_allocator_ ), 0 ); msg->reset(); return msg; } void CMsgMgr::Init(int msgsize /* = 1024 */, int msgnum /* = 2048 */) { typedef char BUFFCOUNT[1024]; msg_allocator_=new ACE_Cached_Allocator<ACE_Message_Block,ACE_SYNCH_MUTEX>(msgnum); data_allocator_ =new ACE_Cached_Allocator<ACE_Data_Block,ACE_SYNCH_MUTEX>(msgnum*2); buff_allocator_ = new ACE_Cached_Allocator<BUFFCOUNT,ACE_SYNCH_MUTEX>(msgnum*2); } void CMsgMgr::Release() { delete msg_allocator_; delete data_allocator_; delete buff_allocator_; } typedef ACE_Singleton<CMsgMgr, ACE_Null_Mutex> MsgMgr; #endif
最新回复
CODE:
#ifndef _ACE_MESSAGE_BLOCK_MANAGER
#define _ACE_MESSAGE_BLOCK_MANAGER
#include "Config.h"
class CMsgMgr
{
public:
CMsgMgr() {};
virtual ~CMsgMgr(){};
public:
void Init( int msgsize = 1024, int msgnum = 2048 );
void Release();
ACE_Message_Block * AllocMsg( void );
private:
ACE_Recursive_Thread_Mutex _lock;
ACE_Allocator * msg_allocator_;
ACE_Allocator * data_allocator_;
ACE_Allocator * buff_allocator_;
};
ACE_Message_Block * CMsgMgr::AllocMsg( void )
{
ACE_Message_Block *msg;
ACE_NEW_MALLOC_RETURN( msg,
static_cast<ACE_Message_Block*>( msg_allocator_->malloc(sizeof( ACE_Message_Block ) ) ),
ACE_Message_Block( 1024,0,0,0,buff_allocator_,0,0,ACE_Time_Value::zero,ACE_Time_Value::max_time,data_allocator_,msg_allocator_ ),
0
);
msg->reset();
return msg;
}
void CMsgMgr::Init(int msgsize /* = 1024 */, int msgnum /* = 2048 */)
{
typedef char BUFFCOUNT[1024];
msg_allocator_=new ACE_Cached_Allocator<ACE_Message_Block,ACE_SYNCH_MUTEX>(msgnum);
data_allocator_ =new ACE_Cached_Allocator<ACE_Data_Block,ACE_SYNCH_MUTEX>(msgnum*2);
buff_allocator_ = new ACE_Cached_Allocator<BUFFCOUNT,ACE_SYNCH_MUTEX>(msgnum*2);
}
void CMsgMgr::Release()
{
delete msg_allocator_;
delete data_allocator_;
delete buff_allocator_;
}
typedef ACE_Singleton<CMsgMgr, ACE_Null_Mutex> MsgMgr;
#endif
MsgMgr::instance()->Init();
用的时候只要这样子。
ACE_Message_Block* pMsg = MsgMgr::instance()->AllocMsg();
用完
pMsg->release();
结束
MsgMgr::instance()->release();