📄 runtime_scheduler.cpp
字号:
// In the config run scheduler, this method registers a dependency between
// two RT_Infos. In the run time scheduler, this is a no-op.
void
ACE_Runtime_Scheduler::add_dependency (RtecScheduler::handle_t handle,
RtecScheduler::handle_t /* dependency */,
CORBA::Long /* number_of_calls */,
RtecScheduler::Dependency_Type_t /* dependency_type */
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::UNKNOWN_TASK))
{
if (handle <= 0 || handle > entry_count_)
ACE_THROW (RtecScheduler::UNKNOWN_TASK ());
// NOTREACHED
#if 0
// Just check that the information is consistent.
RtecScheduler::Dependency_Set& deps = rt_info_[handle - 1]->dependencies;
for (CORBA::ULong i = 0; i < deps.length (); ++i)
{
if (deps[i].rt_info == dependency
&& deps[i].number_of_calls == number_of_calls
&& deps[i].dependency_type == dependency_type)
{
return;
}
}
ACE_ERROR ((LM_ERROR, "unmatched dependency on %s\n",
(const char*)rt_info_[handle - 1]->entry_point));
#endif
}
// In the reconfig scheduler, this method removes a dependency between
// two RT_Infos. In the run time scheduler, this is a no-op.
void
ACE_Runtime_Scheduler::remove_dependency (RtecScheduler::handle_t handle,
RtecScheduler::handle_t /* dependency */,
CORBA::Long /* number_of_calls */,
RtecScheduler::Dependency_Type_t /* dependency_type */
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::UNKNOWN_TASK))
{
if (handle <= 0 || handle > entry_count_)
ACE_THROW (RtecScheduler::UNKNOWN_TASK ());
}
// In the reconfig scheduler, this method enables a dependency between
// two RT_Infos. In the run time scheduler, this is a no-op.
void
ACE_Runtime_Scheduler::set_dependency_enable_state (RtecScheduler::handle_t handle,
RtecScheduler::handle_t /* dependency */,
CORBA::Long /* number_of_calls */,
RtecScheduler::Dependency_Type_t /* dependency_type */,
RtecScheduler::Dependency_Enabled_Type_t /* enabled */
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::UNKNOWN_TASK))
{
if (handle <= 0 || handle > entry_count_)
ACE_THROW (RtecScheduler::UNKNOWN_TASK ());
}
// In the reconfig scheduler, this method enables or disables an RT_Info.
// In the run time scheduler, this is a no-op.
void
ACE_Runtime_Scheduler::set_rt_info_enable_state (RtecScheduler::handle_t handle,
RtecScheduler::RT_Info_Enabled_Type_t /* enabled */
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::UNKNOWN_TASK))
{
if (handle <= 0 || handle > entry_count_)
ACE_THROW (RtecScheduler::UNKNOWN_TASK ());
}
void ACE_Runtime_Scheduler::set_dependency_enable_state_seq (const RtecScheduler::Dependency_Set & dependencies
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::SYNCHRONIZATION_FAILURE,
RtecScheduler::UNKNOWN_TASK))
// This method sets the enable state of a sequence of dependencies.
{
ACE_UNUSED_ARG (dependencies);
ACE_THROW (CORBA::NO_IMPLEMENT ());
}
void ACE_Runtime_Scheduler::set_rt_info_enable_state_seq (
const RtecScheduler::RT_Info_Enable_State_Pair_Set &
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::SYNCHRONIZATION_FAILURE,
RtecScheduler::UNKNOWN_TASK))
// This method enables or disables a sequence of RT_Infos.
{
}
// In the config run scheduler, this method causes scheduling information
// to be computed for all registered RT_Infos. In the run time scheduler,
// this is a no-op.
void
ACE_Runtime_Scheduler::compute_scheduling (CORBA::Long /* minimum_priority */,
CORBA::Long /* maximum_priority */,
RtecScheduler::RT_Info_Set_out /* infos */,
RtecScheduler::Dependency_Set_out /*dependencies */,
RtecScheduler::Config_Info_Set_out /* configs */,
RtecScheduler::Scheduling_Anomaly_Set_out /* anomalies */
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::UTILIZATION_BOUND_EXCEEDED,
RtecScheduler::INSUFFICIENT_THREAD_PRIORITY_LEVELS,
RtecScheduler::TASK_COUNT_MISMATCH))
{
// TODO: Right now just do nothing, later we could validate the
// priorities (without recomputing).
// TODO: fill up the infos.
return;
}
// Recomputes the scheduling priorities, etc.
void
ACE_Runtime_Scheduler::recompute_scheduling (CORBA::Long minimum_priority,
CORBA::Long maximum_priority,
RtecScheduler::Scheduling_Anomaly_Set_out anomalies
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::UTILIZATION_BOUND_EXCEEDED,
RtecScheduler::SYNCHRONIZATION_FAILURE,
RtecScheduler::INSUFFICIENT_THREAD_PRIORITY_LEVELS,
RtecScheduler::TASK_COUNT_MISMATCH,
RtecScheduler::INTERNAL,
RtecScheduler::DUPLICATE_NAME))
{
// TODO: Right now just do nothing.
ACE_UNUSED_ARG(minimum_priority);
ACE_UNUSED_ARG(maximum_priority);
ACE_UNUSED_ARG(anomalies);
return;
}
// Returns the set of rt_infos, with their assigned priorities (as
// of the last schedule re-computation).
void
ACE_Runtime_Scheduler::get_rt_info_set (RtecScheduler::RT_Info_Set_out infos
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::SYNCHRONIZATION_FAILURE,
RtecScheduler::INTERNAL))
{
// TODO: Right now just do nothing.
ACE_UNUSED_ARG(infos);
return;
}
// Returns the set of rt_infos, with their assigned priorities (as
// of the last schedule re-computation).
void
ACE_Runtime_Scheduler::get_dependency_set (RtecScheduler::Dependency_Set_out dependencies
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::SYNCHRONIZATION_FAILURE,
RtecScheduler::INTERNAL))
{
// TODO: Right now just do nothing.
ACE_UNUSED_ARG(dependencies);
return;
}
// Returns the set of config_infos, describing the appropriate
// number, types, and priority levels for the dispatching lanes.
void
ACE_Runtime_Scheduler::get_config_info_set (RtecScheduler::Config_Info_Set_out configs
ACE_ENV_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::SYNCHRONIZATION_FAILURE,
RtecScheduler::INTERNAL))
{
// TODO: Right now just do nothing.
ACE_UNUSED_ARG(configs);
return;
}
// Provides the thread priority and queue type for the given priority
// level.
void
ACE_Runtime_Scheduler::dispatch_configuration (RtecScheduler::Preemption_Priority_t p_priority,
RtecScheduler::OS_Priority& priority,
RtecScheduler::Dispatching_Type_t & d_type
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::NOT_SCHEDULED,
RtecScheduler::UNKNOWN_PRIORITY_LEVEL))
{
// Throw an exception if a valid schedule has not been loaded
if (config_count_ <= 0
|| config_info_ [p_priority].preemption_priority != p_priority)
{
ACE_THROW (RtecScheduler::NOT_SCHEDULED ());
ACE_NOTREACHED (return);
}
// throw an exception if an invalid priority was passed
else if (p_priority < 0 || p_priority >= config_count_)
{
ACE_THROW (RtecScheduler::UNKNOWN_PRIORITY_LEVEL());
ACE_NOTREACHED (return);
}
else
{
priority = config_info_ [p_priority].thread_priority;
d_type = config_info_ [p_priority].dispatching_type;
return;
}
}
// Returns the last priority number assigned to an operation in the
// schedule. The number returned is one less than the total number
// of scheduled priorities. All scheduled priorities range from 0
// to the number returned, inclusive.
RtecScheduler::Preemption_Priority_t
ACE_Runtime_Scheduler::last_scheduled_priority (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::NOT_SCHEDULED))
{
// throw an exception if a valid schedule has not been loaded
if (config_count_ <= 0)
ACE_THROW_RETURN (RtecScheduler::NOT_SCHEDULED(),
(RtecScheduler::Preemption_Priority_t) -1);
else
return (RtecScheduler::Preemption_Priority_t) (config_count_ - 1);
}
void
ACE_Runtime_Scheduler::get_config_infos (RtecScheduler::Config_Info_Set_out /*configs */
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
RtecScheduler::NOT_SCHEDULED))
{
// throw an exception if a valid schedule has not been loaded
if (this->config_count_ <= 0)
ACE_THROW (RtecScheduler::NOT_SCHEDULED());
//TODO: fill the Config_Info_Set with the runtime Config_Infos
//for now, this function is unimplemented
//
// @@ If unimplemented we either return a CORBA::NO_IMPL exception
// or a proprietary ACE_NOTSUP; -- Bala
ACE_THROW (CORBA::NO_IMPLEMENT ());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -