找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: slugzoe

一个ACE中getq()时候产生的问题

[复制链接]
 楼主| 发表于 2009-12-1 00:32:02 | 显示全部楼层
万分感谢各位版主大大们的赐教,诚如wishel版主所言,打trace是最快捷的途径,我这边用gdb打印出来了错误处
0x001d7526 in ACE_Message_Block::total_size_and_length (this=0xb7f73a98, mb_size=@0xb5a6ff4c,
    mb_length=@0xb5a6ff48) at Message_Block.cpp:267
267           mb_size += i->size ();
(gdb) print i
$1 = (const ACE_Message_Block *) 0xb7f73a98
(gdb) print *i
$2 = {_vptr.ACE_Message_Block = 0xb7f73af8, rd_ptr_ = 0, wr_ptr_ = 7, priority_ = 0,
  cont_ = 0x0, next_ = 0x0, prev_ = 0x0, flags_ = 0, data_block_ = 0x0,
  message_block_allocator_ = 0x9fd9558}

其实可以看到i已经不存在了,我会尝试打印size的大小,不过就现在的流量而言顶棚了不到5K,很难想象会是带宽问题,很可能只是数据传的太快,我会仔细地再看看,我这边代码比较分散,不是很方便传,如果实在搞不出来,希望大大们可以远程协助下我
发表于 2009-12-1 09:58:38 | 显示全部楼层
帖关键代码就成,把涉及业务、隐私的东西删除即可。
有代码才好判断问题,不然都是评经验瞎猜。
 楼主| 发表于 2009-12-8 10:07:35 | 显示全部楼层
实在不行了,尝试了半天还是没找到原因,这里把gateway整个代码附上.希望各位大大帮忙解释一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?用户注册

×
 楼主| 发表于 2009-12-8 10:07:57 | 显示全部楼层
代码写的很丑,大家不要笑哈
发表于 2009-12-11 10:52:32 | 显示全部楼层
本人也遇到类似问题。本人使用了ACE的线程池,用一个MANAGER管理分发MESSAGE_BLOCK,多个worker做分线程负责处理。每个worker去getq取消息包的时候发生了问题,发现处理速度快的时候塞进去一个包,有时候getq取出来好几个重复的包。开始也不相信,现在用自己的东西代替了getq函数,发现问题就解决了。还有ACE下得消息队列也是同样的问题,只要处理速度一快,塞进去一个包,取出来好几个重复的包!不知何故,请求高手指点!
 楼主| 发表于 2010-1-3 22:50:36 | 显示全部楼层
问题还没有解决,版主大大们忘了么=。=
发表于 2010-1-4 10:45:44 | 显示全部楼层
楼主不好意思啊,最近非常忙。代码没时间看。。。
建议换个环境试试看,先排除环境的问题。
前两天有个朋友也让我看一个奇怪的问题,但在我机器上运行的好好的。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-11-22 02:14 , Processed in 0.018899 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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