#include <EC_Kokyu_Dispatching.h>
Public Member Functions | |
TAO_EC_Kokyu_Dispatching (TAO_EC_Event_Channel_Base *ec, int sched_policy, int sched_scope) | |
virtual void | activate (void) |
virtual void | shutdown (void) |
virtual void | push (TAO_EC_ProxyPushSupplier *proxy, RtecEventComm::PushConsumer_ptr consumer, const RtecEventComm::EventSet &event, TAO_EC_QOS_Info &qos_info) |
virtual void | push_nocopy (TAO_EC_ProxyPushSupplier *proxy, RtecEventComm::PushConsumer_ptr consumer, RtecEventComm::EventSet &event, TAO_EC_QOS_Info &qos_info) |
Private Member Functions | |
void | setup_lanes (void) |
Private Attributes | |
ACE_Allocator * | allocator_ |
Kokyu::Dispatcher_Auto_Ptr | dispatcher_ |
The dispatcher. | |
RtecScheduler::Scheduler_var | scheduler_ |
The scheduler. | |
int | lanes_setup_ |
int | disp_sched_policy_ |
int | disp_sched_scope_ |
This strategy uses multiple queues, each serviced by a thread at different priority. This minimizes priority inversion because the consumers at higher priority are serviced before consumers at lower priority. It is more flexible than using the supplier thread to dispatch because it allows high-priority suppliers to push events to low-priority consumers (and vice-versa). It also isolates the supplier threads from the time spent on upcalls to the consumer objects, making the system easier to analyze and schedule.
TAO_EC_Kokyu_Dispatching::TAO_EC_Kokyu_Dispatching | ( | TAO_EC_Event_Channel_Base * | ec, | |
int | sched_policy, | |||
int | sched_scope | |||
) |
The scheduler is used to find the range of priorities and similar info.
void TAO_EC_Kokyu_Dispatching::activate | ( | void | ) | [virtual] |
Initialize all the data structures, activate any internal threads, etc.
Implements TAO_EC_Dispatching.
void TAO_EC_Kokyu_Dispatching::push | ( | TAO_EC_ProxyPushSupplier * | proxy, | |
RtecEventComm::PushConsumer_ptr | consumer, | |||
const RtecEventComm::EventSet & | event, | |||
TAO_EC_QOS_Info & | qos_info | |||
) | [virtual] |
The consumer represented by proxy should receive event. It can use the information in qos_info to determine the event priority (among other things).
Implements TAO_EC_Dispatching.
void TAO_EC_Kokyu_Dispatching::push_nocopy | ( | TAO_EC_ProxyPushSupplier * | proxy, | |
RtecEventComm::PushConsumer_ptr | consumer, | |||
RtecEventComm::EventSet & | event, | |||
TAO_EC_QOS_Info & | qos_info | |||
) | [virtual] |
Implements TAO_EC_Dispatching.
void TAO_EC_Kokyu_Dispatching::setup_lanes | ( | void | ) | [private] |
void TAO_EC_Kokyu_Dispatching::shutdown | ( | void | ) | [virtual] |
Deactivate any internal threads and cleanup internal data structures, it should only return once the threads have finished their jobs.
Implements TAO_EC_Dispatching.
int TAO_EC_Kokyu_Dispatching::disp_sched_policy_ [private] |
int TAO_EC_Kokyu_Dispatching::disp_sched_scope_ [private] |
Kokyu::Dispatcher_Auto_Ptr TAO_EC_Kokyu_Dispatching::dispatcher_ [private] |
The dispatcher.
int TAO_EC_Kokyu_Dispatching::lanes_setup_ [private] |
RtecScheduler::Scheduler_var TAO_EC_Kokyu_Dispatching::scheduler_ [private] |
The scheduler.