您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 1浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Ice笔记-利用Ice::Application类简化Ice应用

phymat.nico 发布时间:2017-12-18 00:26:08 ,浏览量:1

作者: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 
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0972s