找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3489|回复: 2

Message Block问题

[复制链接]
发表于 2008-1-6 16:43:50 | 显示全部楼层 |阅读模式
在使用Proactor框架时一般怎么样将数据放到Message_Block再进行发送?我使用下边的方法为什么会出现异常,选择“终止”后,提示“内存不能为读”。
  1. handle_read_stream()
  2. {
  3. ACE_Message_Block &mblk = result.message_block();
  4. if(!result.success || result.bytes_transferred()==0)
  5. {
  6. mblk.release();
  7. delete this;
  8. return;
  9. }
  10. else
  11. {
  12.    USER_INFO *user_info=new USER_INFO;   //USER_INFO是我定义的一个结构体,我发送的消息一般都是这个结构体
  13.    ACE_OS::memcpy(user_info,mblk.rd_ptr(),sizeof(USER_INFO));
  14.    switch(user_info->l1)
  15. {
  16. case MG_TRANSFER:
  17. {
  18.     user_info->l2="测试";
  19.     ACE_OS::memcpy(mblk.wr_ptr(),user_info,sizeof(USER_INFO));
  20.     mblk.wr_ptr(sizeof(USER_INFO));
  21. ws_.write(mblk,mblk.length());     //ws_定义为 ACE_Asynch_Write_Stream  ws_;
  22. mblk.release();
  23. }
  24. break;
  25. }
  26. }
复制代码
 楼主| 发表于 2008-1-6 16:44:12 | 显示全部楼层
可以继续复用前一个消息块,不一定非得重新生成一个,再说消息块本身就有引用计数
 楼主| 发表于 2008-1-6 16:44:27 | 显示全部楼层
可以直接把此消息块放入一个单独的发送线程中,这个问题本网站上有类似情况,你可以搜一下
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-25 01:19 , Processed in 0.020539 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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