void TAO_EC_Kokyu_Dispatching::setup_lanes (void) { // Query the scheduler togetConfig_Infos RtecScheduler::Config_Info_Set_var configs; try { this->scheduler_->get_config_infos(configs.out()); } catch (const CORBA::Exception&) { // Ignore exceptions.. } //might be no Config_Infos in the set (if none passed to scheduler_) // Convert RtecScheduler::Config_Info_Set to Kokyu::ConfigInfoSet // OK to assume exact correspondence betwen Config_Info and ConfigInfo? Kokyu::ConfigInfoSet kconfigs(configs->length()); for(CORBA::ULong i=0; i<configs->length(); ++i) { kconfigs[i].preemption_priority_ = configs[i].preemption_priority; kconfigs[i].thread_priority_ = configs[i].thread_priority; switch (configs[i].dispatching_type) { case RtecScheduler::STATIC_DISPATCHING: kconfigs[i].dispatching_type_ = Kokyu::FIFO_DISPATCHING; break; case RtecScheduler::DEADLINE_DISPATCHING: kconfigs[i].dispatching_type_ = Kokyu::DEADLINE_DISPATCHING; break; case RtecScheduler::LAXITY_DISPATCHING: kconfigs[i].dispatching_type_ = Kokyu::LAXITY_DISPATCHING; break; } } Kokyu::Dispatcher_Attributes attrs; attrs.config_info_set_ = kconfigs; attrs.sched_policy (disp_sched_policy_); attrs.sched_scope (disp_sched_scope_); // Create Kokyu::Dispatcher using factory Kokyu::Dispatcher_Auto_Ptr tmp(Kokyu::Dispatcher_Factory::create_dispatcher(attrs)); this->dispatcher_ = tmp; this->lanes_setup_ = 1; //ORBSVCS_DEBUG ((LM_DEBUG, "Kokyu dispatcher setup\n")); }
int ACE_TMAIN (int argc, ACE_TCHAR** argv) { Kokyu::ConfigInfoSet config_info(3); int hi_prio, me_prio, lo_prio; int sched_policy=ACE_SCHED_FIFO; Kokyu::Dispatcher_Attributes attrs; if (parse_args (argc, argv) == -1) return 0; if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "fifo") == 0) { sched_policy = ACE_SCHED_FIFO; } else if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "other") == 0) { sched_policy = ACE_SCHED_OTHER; } else if (ACE_OS::strcasecmp(sched_policy_str.c_str(), "rr") == 0) { sched_policy = ACE_SCHED_RR; } attrs.sched_policy (sched_policy); hi_prio = ACE_Sched_Params::priority_max (sched_policy); me_prio = ACE_Sched_Params::previous_priority (sched_policy, hi_prio); lo_prio = ACE_Sched_Params::previous_priority (sched_policy, me_prio); config_info[0].preemption_priority_ = 1; config_info[0].thread_priority_ = hi_prio ; config_info[0].dispatching_type_ = Kokyu::FIFO_DISPATCHING; config_info[1].preemption_priority_ = 2; config_info[1].thread_priority_ = me_prio; config_info[1].dispatching_type_ = Kokyu::FIFO_DISPATCHING; config_info[2].preemption_priority_ = 3; config_info[2].thread_priority_ = lo_prio; config_info[2].dispatching_type_ = Kokyu::FIFO_DISPATCHING; attrs.config_info_set_ = config_info; ACE_DEBUG ((LM_DEBUG, "before create_dispatcher\n" )); auto_ptr<Kokyu::Dispatcher> disp (Kokyu::Dispatcher_Factory::create_dispatcher (attrs)); ACE_ASSERT (disp.get() != 0); MyCommand cmd1(1), cmd2(2), cmd3(3); Kokyu::QoSDescriptor qos1, qos2, qos3; qos1.preemption_priority_ = 2; ACE_DEBUG ((LM_DEBUG, "Priority of command1 is %d\n", qos1.preemption_priority_)); qos2.preemption_priority_ = 3; ACE_DEBUG ((LM_DEBUG, "Priority of command2 is %d\n", qos2.preemption_priority_)); qos3.preemption_priority_ = 1; ACE_DEBUG ((LM_DEBUG, "Priority of command3 is %d\n", qos3.preemption_priority_)); if (disp->dispatch (&cmd1, qos1) == -1 || disp->dispatch (&cmd2, qos2) == -1 || disp->dispatch (&cmd3, qos3) == -1) ACE_ERROR_RETURN ((LM_ERROR, "Error in dispatching command object\n"), -1); if (disp->activate () == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Error activating dispatcher. ") ACE_TEXT ("You might not have superuser privileges ") ACE_TEXT ("to run FIFO class. Try \"-p other\"\n")), -1); } disp->shutdown (); ACE_DEBUG ((LM_DEBUG, "after shutdown\n")); return 0; }