代码出处:Notification Service
int TAO_Notify_Service_Driver::init_dispatching_ORB (int& argc, ACE_TCHAR *argv []) { this->dispatching_orb_ = CORBA::ORB_init (argc, argv, "dispatcher"); this->apply_timeout (this->dispatching_orb_.in ()); return 0; } void TAO_Notify_Service_Driver::apply_timeout (CORBA::ORB_ptr orb) { #if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0 if (this->timeout_ != 0) { // convert from msec to "TimeT" CORBA::Any timeout; TimeBase::TimeT value = 10000 * this->timeout_; timeout <<= value; CORBA::Object_var object = orb->resolve_initial_references ("ORBPolicyManager"); CORBA::PolicyManager_var policy_manager = CORBA::PolicyManager::_narrow (object.in ()); if (CORBA::is_nil (policy_manager.in ())) throw CORBA::INTERNAL (); CORBA::PolicyList policy_list (1); policy_list.length (1); policy_list[0] = orb->create_policy ( Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE, timeout); policy_manager->set_policy_overrides (policy_list, CORBA::SET_OVERRIDE); policy_list[0]->destroy (); } #else ACE_UNUSED_ARG (orb); #endif /* TAO_HAS_CORBA_MESSAGING != 0 */ }