作者:ydogg,转载请申明。
在编写Ice相关应用时,无论是Client还是Server端,都必须进行一些必要的动作,如:Ice通信器初始化、异常捕获,以及应用终止后的销毁。鉴于每个应用都需要,Ice运行时库提供了Ice::Application类来解放用户,避免重复劳动,消除繁琐的初始化和销毁细节。Ice::Application虽然实用,但总体来说是个比较简单的类,主要提供了Ice通信器初始化和信号捕获处理两大功能。下面将从功能和实现两方面进行阐述,并给出常见用法和注意事项。源码版本为Ice-3.2.1。
一.Ice::Application概述
Ice::Application本身是一个抽象类,其run()函数为纯虚函数,因此必须被继承后使用。 Ice::Application 是一个单体(singleton)类,会创建单个通信器。 如果你要使用多个通信器,不能使用Ice::Application来定义多个App。而至多定义一个App的实例。 其它通信器需要使用Ice::initialize()手工生成。
二.Ice::Application的成员
Ice::Application无真正成员变量,其实际使用变量均在实现文件中以静态形式提供。因此其提供的主要是静态接口
//
Application的入口函数,提供了丰富的初始化方式,一般使用第一个
//
将应用主函数参数直接传入即可
int
main(
int
,
char
*
[]);
int
main(
int
,
char
*
[],
const
char
*
);
int
main(
int
,
char
*
[],
const
Ice::InitializationData
&
);
int
main(
int
,
char
*
[],
const
char
*
,
const
Ice::LoggerPtr
&
);
int
main(
const
StringSeq
&
);
int
main(
const
StringSeq
&
,
const
char
*
);
int
main(
const
StringSeq
&
,
const
Ice::InitializationData
&
);
//
应用的执行循环,应用需要继承这个函数并用自己的逻辑重写
virtual
int
run(
int
,
char
*
[])
=
0
;
//
信号回调函数
//
如果需要自己对信号进行处理,则需要继承和改写这个函数
//
注意,需在run()函数中调用callbackOnInterrupt()来向Ice表示使用用户回调
//
该函数的默认实现是空函数
virtual
void
interruptCallback(
int
);
//
返回应用名,即argv[0]
static
const
char
*
appName();
//
返回当前使用的Ice通信器实例指针
static
CommunicatorPtr communicator();
//
设置信号处理模式
//
//
销毁模式:信号到来时将通信器实例销毁,也是Application的默认模式
static
void
destroyOnInterrupt();
//
关闭模式:信号到来时将通信器实例关闭,但不销毁
static
void
shutdownOnInterrupt();
//
忽略模式:信号到来时将通信器不做任何处理
static
void
ignoreInterrupt();
//
用户模式:信号到来时将调用interruptCallback()函数
static
void
callbackOnInterrupt();
//
信号的阻止和放开,不常用
//
阻塞信号的到来
static
void
holdInterrupt();
//
放开被阻塞的信号
static
void
releaseInterrupt();
//
Application当前是否被信号中断
//
可用于判断Application的结束是否由于信号造成
static
bool
interrupted();
三.使用方法
一般直接初始化通信器的用法如下:
#include
int
main(
int
argc,
char
*
argv[]) {
int
status
=
0
; Ice::CommunicatorPtr ic;
try
{ ic
=
Ice::initialize(argc, argv);
//
Server code here...
//
...
}
catch
(
const
Ice::Exception
&
e) { cerr
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录