TAO 处理接口访问超时例程

来源:互联网 发布:bootstrap获取tr数据 编辑:程序博客网 时间:2024/05/06 17:38

TAO 处理接口访问超时例程

 

在CORBA中有时需要判断接口访问是否超时,因为接口之间访问往往是同步操作,没有超时机制的话调用者很容易阻塞,下面例子可以帮助我们解决这个问题:

#include "helloC.h"
#include "ace/Profile_Timer.h"
#include "tao/Messaging/Messaging.h"
#include "tao/Messaging/TAO_ExtC.h"
#include
#include
#include

ACE_Profile_Timer timer;         //定时器
TimeBase::TimeT timeout = 6*1000*10000; //超时6秒

int main(int argc, char ** argv)
{
CORBA::ORB_var orb;

if (argc < 2) {
  printf("usage: %s ", argv[0]);
  return -1;
}
orb = CORBA::ORB_init(argc,
   argv,
   0
   ACE_ENV_ARG_PARAMETER);
if (CORBA::is_nil(orb.in()))
  return -1;
CORBA::Object_var obj = orb->string_to_object(argv[1] ACE_ENV_ARG_PARAMETER);
if (CORBA::is_nil(obj.in()))
  return -1;
/*获取ORB的策略对象*/
CORBA::Object_var objPolicy = orb->resolve_initial_references("PolicyCurrent"
  ACE_ENV_ARG_PARAMETER);
CORBA::PolicyCurrent_var policyCur =
  CORBA::PolicyCurrent::_narrow (objPolicy.in () ACE_ENV_ARG_PARAMETER);
/*设置超时*/
CORBA::Any anyTm;
anyTm <<= timeout;
/*设置ORB策略*/
CORBA::PolicyList policy_list(1);
policy_list.length (1);
policy_list[0] = orb->create_policy (Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE,
  anyTm
  ACE_ENV_ARG_PARAMETER);
policyCur->set_policy_overrides (policy_list,
  CORBA::ADD_OVERRIDE
  ACE_ENV_ARG_PARAMETER);
policy_list[0]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
timer.start();  //启动定时器
ACE_TRY
{
  Hello_var hello = Hello::_narrow(obj.in());
  CORBA::String_var msg;
  hello->message(msg);    //访问服务接口
  std::cout<} ACE_CATCHANY {
  timer.stop();
  ACE_Profile_Timer::ACE_Elapsed_Time el;
  timer.elapsed_time (el);
  printf("elapse time is %d/n", el.real_time);
}
ACE_ENDTRY;
orb->destroy();

return 0;
}