piaoliushi
发表于 2011-3-21 13:54:53
并且以上的关闭动作在什么情况下触发?貌似跟踪不到这部分代码。
freeeyes
发表于 2011-3-22 15:42:31
感谢各位提出的问题,这些问题都会在新版本上得到解决。
我争取在清明节前后发布新版,解决各位的问题,同时添加一些新的实用功能,最近比较忙。
adias
发表于 2011-3-23 15:07:52
bool CProServerManager::Close()
{
OUR_DEBUG((LM_INFO, "Close begin....\n")); ...
piaoliushi 发表于 2011-3-21 13:38 http://www.acejoy.com/bbs/images/common/back.gif
这里的注释,就是stop写为start的地方,写的是Reactor,是不是也错了
adias
发表于 2011-3-24 18:43:30
函数void CProConnectHandle::Init(uint16 u2HandlerID)
参数为uint16,传入参数的地方
CProConnectHandlerPool::Create()
void CProConnectHandlerPool::Init(int nObjcetCount)
传入的是uint32,可能会有数据损失,虽然一个服务器连接可能达不到uint16最大值,但是我觉得还是改下的好,避免隐患。
piaoliushi
发表于 2011-3-25 10:33:10
楼主好!
看了前摄器的创建过程,感觉有点乱,也发现一些问题,貌似您是想与reactor模式一起使用,根据ReacotrCount来创建Proactor实例,一般情况下,Proactor是作为单体使用,当然也可以作为多实例,楼主封装的CAceProactor显然是想利用后者,但在创建过程中ACE建议要关闭Proactor单体模式(ACE_Proactor::close_singleton()),代码中没有发现此开关的调用。
int nEventCount = 0;
if(nThreadCount == 0)
{//得到CPU的个数,监听线程根据CPU数量来创建多个事件回调。
int nEventCount = ACE_OS::num_processors_online() * 2;
}
此处的可能是笔误,nEventCount在if条件范围内无需重新定义,否则nEventCount将永为0.
neogeokoy
发表于 2011-3-27 03:08:22
lz在ace_message_queue上使用了通知策略,不是说这是ace的一个陷阱么,莫非解决了?
adias
发表于 2011-3-28 18:08:38
BUG
void CProConnectHandlerPool::Close()
for(itorFreeB; itorFreeB != itorFreeE; itorFreeB++)
{
CProConnectHandle* pObject = (CProConnectHandle* )itorFreeE->second;//这里
if(NULL != pObject)
{
SAFE_DELETE(pObject);
}
}
还有这里的map没有清空
adias
发表于 2011-3-31 12:14:04
楼主
CProConnectHandle::handle_write_stream
中没有处理短写,不知道是出于什么情况考虑
adias
发表于 2011-4-5 17:28:49
版主你好,问下关于你的ACE_Message_Block的内存池的问题
在MessageBlockManager.h中
有
typedefACE_Malloc<ACE_LOCAL_MEMORY_POOL, ACE_SYNCH_MUTEX> MUTEX_MALLOC;
typedef ACE_Allocator_Adapter<MUTEX_MALLOC> Mutex_Allocator;
然后在init的时候,每个分配器都是从Mutex_Allocator new来的
在create和close中又加了锁操作,这个锁是否是没有必要的,因为分配器已经有锁了。
还有另外一个问题我pm了版主但是一直没有回复,也是关于这个类的问题,如果版主看到了能否解答一下,万分感谢。
freeeyes
发表于 2011-4-6 10:42:10
最近重感冒,一直没有上来,以上几个问题我做一下解答:
(1)Proactor模式下,我为什么去掉了短写。这是因为根据MSDN的说法,在异步模式下,数据的收发并不会因为发送者的数据包长度而进行限定,也就是收到了多少就是多少。所以,接口内不必处理短写。
(2)关于内存池,这里的加锁是为了和我的其他缓冲池数据统一,如果你觉得这里有些繁复,完全可以去掉。
(3)关于你说的BUG,我认为不需要清空,因为在进程结束的时候会自然释放这些指针地址。而指针地址指向的空间,我已经做了释放,所以不必在这里再释放一次。map析构的时候会处理的。当然,加上也很好。