找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 2975|回复: 1

一个消息队列的问题

[复制链接]
发表于 2007-12-31 22:27:46 | 显示全部楼层 |阅读模式
下面是我封装的一个消息队列类,不知道这样会不会内存泄露,大家帮忙看看
  1. class MessageQueue
  2. {
  3. public:
  4. MessageQueue(const int nMessageLength)
  5. {
  6.   m_pMessageBlock = new ACE_Message_Block(nMessageLength);
  7.   m_nMessageLength = nMessageLength;
  8.   m_clMessageQueue.high_water_mark (nMessageLength*1000);
  9.   m_clMessageQueue.low_water_mark (nMessageLength*1000);
  10. }
  11. ~MessageQueue(){delete m_pMessageBlock;}
  12. bool Send(char* buffer);
  13. bool Receive(char* buffer);
  14. private:
  15. int m_nMessageLength;
  16. ACE_Message_Queue<ACE_MT_SYNCH> m_clMessageQueue;
  17. ACE_Message_Block* m_pMessageBlock;
  18. };
  19. //
  20. //发送
  21. //
  22. bool MessageQueue::Send(char* buffer)
  23. {
  24. if(NULL == buffer)return false;
  25. ACE_Time_Value initial (0);
  26. memcpy(m_pMessageBlock->wr_ptr(),buffer,m_nMessageLength);
  27. if(m_clMessageQueue.enqueue(m_pMessageBlock,&initial) == -1)return false;
  28. return true;
  29. }
  30. //
  31. //接收
  32. //
  33. bool MessageQueue::Receive(char* buffer)
  34. {
  35. if(NULL == buffer)return false;
  36. ACE_Time_Value initial (0);
  37. if(m_clMessageQueue.dequeue(m_pMessageBlock,&initial) == -1)return false;
  38. memcpy(buffer,m_pMessageBlock->rd_ptr(),m_nMessageLength);
  39. return true;
  40. }
复制代码
 楼主| 发表于 2007-12-31 22:27:55 | 显示全部楼层
建议直接使用ACE_Task,这样用不太好。是否有泄漏,还得看你完整代码的管理。
一般说来,从队列出来的ACE_Message_Block,使用完成后,要调用release()清除。可是你的代码是保存起来了。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 07:17 , Processed in 0.011714 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表