ACE的初始化和关闭

一 ACE 初始化和关闭主要干了些什么?
我们一般使用ACE 开发都会使用到下面几行代码:


#include "stdafx.h"
#include <ace/ACE.h>
#include <ace/INET_Addr.h>
#include <ace/SOCK_Connector.h>
#include <ace/SOCK_Stream.h>
#include <string>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
ACE::init();

/* .......
do something
...... */
ACE::fini();
return 0;
}

ACE::init(); 作用是初始化ACE相关环境。ACE::fini(); 作用是关闭ACE。这两函数到底干了些什么呢?让我先看看ACE 源码是怎么写的吧!
Init_ACE.h 文件时这么定义上面这两个函数的:

#ifndef ACE_INIT_ACE_H
#define ACE_INIT_ACE_H

#include /**/ "ace/pre.h"

#include /**/ "ace/ACE_export.h"

namespace ACE
{
extern ACE_Export int init (void);
extern ACE_Export int fini (void);
extern unsigned int init_fini_count_;
}

#endif

在Init_ACE.cpp 文件中可以看到他们的实现

ACE::init (void)
{
// Don't use ACE_TRACE, because Object_Manager might not have been
// instantiated yet.
// ACE_TRACE ("ACE::init");

++ACE::init_fini_count_;

return ACE_Object_Manager::instance ()->init ();
}

int
ACE::fini (void)
{
ACE_TRACE ("ACE::fini");

if (ACE::init_fini_count_ > 0)
{
if (--ACE::init_fini_count_ == 0)
return ACE_Object_Manager::instance ()->fini ();
else
// Wait for remaining fini () calls.
return 1;
}
else
// More ACE::fini () calls than ACE::init () calls. Bad
// application!
return -1;
}

从上面的代码好像看不出来什么哦!但是我们还是有发现的,比如说:ACE_Object_Manager !这个类是干什么的呢?这正是我们要探讨的。


二 ACE_Object_Manager
ACE_Object_Manager。顾名思义,这个类所作的事情是管理对象。ACE库含有这个类的单个实例,当ACE 实例化ACE对象时,这些对象都将在ACE_Object_Manager这里登记备案。登记时一般需要下面三个信息:
void *object :对象执政。
ACE_CLEANUP_FUNC cleanup_hook:销毁对象的函数指针。
void *param:相关参数。
对象都被登记到一个 registered_objects_ 队列中。registered_objects_ 是ACE_OS_Exit_Info 的一个指针数据成员。上述这些工作均由ACE_OS_Exit_Info 类的at_exit_i 函数完成。

intACE_OS_Exit_Info::at_exit_i (void *object,
ACE_CLEANUP_FUNC cleanup_hook,
void *param)
{
ACE_Cleanup_Info new_info;
new_info.object_ = object;
new_info.cleanup_hook_ = cleanup_hook;
new_info.param_ = param;

ACE_Cleanup_Info_Node *new_node = 0;

if ((new_node = registered_objects_->insert (new_info)) == 0)
return -1;
else
{
registered_objects_ = new_node;
return 0;
}
}

其中ACE_CLEANUP_FUNC 的定义如下:
typedef void (*ACE_CLEANUP_FUNC)(void *object, void *param)。

当你调用ACE::fini () 的时候,ACE_Object_Manager 会以与登记次序相反的次序销毁所有登记的对象。

转载于:https://www.cnblogs.com/duoluoo/archive/2012/03/09/ACE_1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值