peakzhang 发表于 2008-1-6 16:43:50

Message Block问题

在使用Proactor框架时一般怎么样将数据放到Message_Block再进行发送?我使用下边的方法为什么会出现异常,选择“终止”后,提示“内存不能为读”。

handle_read_stream()
{
ACE_Message_Block &mblk = result.message_block();
if(!result.success || result.bytes_transferred()==0)
{
mblk.release();
delete this;
return;
}
else
{
   USER_INFO *user_info=new USER_INFO;   //USER_INFO是我定义的一个结构体,我发送的消息一般都是这个结构体
   ACE_OS::memcpy(user_info,mblk.rd_ptr(),sizeof(USER_INFO));
   switch(user_info->l1)
{
case MG_TRANSFER:
{
    user_info->l2="测试";
    ACE_OS::memcpy(mblk.wr_ptr(),user_info,sizeof(USER_INFO));
    mblk.wr_ptr(sizeof(USER_INFO));
ws_.write(mblk,mblk.length());   //ws_定义为 ACE_Asynch_Write_Streamws_;
mblk.release();
}
break;
}
}

peakzhang 发表于 2008-1-6 16:44:12

可以继续复用前一个消息块,不一定非得重新生成一个,再说消息块本身就有引用计数

peakzhang 发表于 2008-1-6 16:44:27

可以直接把此消息块放入一个单独的发送线程中,这个问题本网站上有类似情况,你可以搜一下
页: [1]
查看完整版本: Message Block问题