#include <EC_RTCORBA_Dispatching.h>
Inheritance diagram for TAO_EC_RTCORBA_Dispatching:


Public Member Functions | |
| TAO_EC_RTCORBA_Dispatching (const RTCORBA::ThreadpoolLanes &lanes, RTCORBA::PriorityMapping *mapping, RTCORBA::Current_ptr current) | |
| Constructor. | |
| ~TAO_EC_RTCORBA_Dispatching (void) | |
| Destructor. | |
| 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 Attributes | |
| RTCORBA::ThreadpoolLanes | lanes_ |
| The thread pools... | |
| RTCORBA::PriorityMapping * | priority_mapping_ |
| Used to map between CORBA and native priorities. | |
| RTCORBA::Current_var | current_ |
| Used to get the current RTCORBA priority. | |
| ACE_Thread_Manager | thread_manager_ |
| Use our own thread manager. | |
| TAO_EC_Dispatching_Task * | tasks_ |
| The dispatching task(s), one per lane. | |
Definition at line 37 of file EC_RTCORBA_Dispatching.h.
|
||||||||||||||||
|
Constructor.
Definition at line 11 of file EC_RTCORBA_Dispatching.cpp. References ACE_NEW, lanes_, and ACE_Task_Base::thr_mgr().
00014 : lanes_ (lanes) 00015 , priority_mapping_ (mapping) 00016 , current_ (RTCORBA::Current::_duplicate (current)) 00017 { 00018 CORBA::ULong number_lanes = this->lanes_.length (); 00019 ACE_NEW (this->tasks_, TAO_EC_Dispatching_Task[number_lanes]); 00020 for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i) 00021 this->tasks_[i].thr_mgr (&this->thread_manager_); 00022 } |
|
|
Destructor.
Definition at line 24 of file EC_RTCORBA_Dispatching.cpp.
00025 {
00026 delete[] this->tasks_;
00027 }
|
|
|
Initialize all the data structures, activate any internal threads, etc. Implements TAO_EC_Dispatching. Definition at line 30 of file EC_RTCORBA_Dispatching.cpp. References ACE_Task_Base::activate(), lanes_, and priority_mapping_.
00031 {
00032 for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i)
00033 {
00034 CORBA::ULong nthreads = this->lanes_[i].static_threads;
00035 if (nthreads == 0)
00036 {
00037 nthreads = 1;
00038 }
00039 RTCORBA::Priority corba_priority = this->lanes_[i].lane_priority;
00040 RTCORBA::NativePriority native_priority;
00041 if (this->priority_mapping_->to_native (corba_priority,
00042 native_priority) != 0)
00043 {
00044 this->tasks_[i].activate (
00045 THR_SCHED_FIFO | THR_NEW_LWP | THR_JOINABLE,
00046 nthreads, 0,
00047 native_priority);
00048 }
00049 }
00050 }
|
|
||||||||||||||||||||
|
Definition at line 70 of file EC_RTCORBA_Dispatching.cpp. References ACE_ENV_ARG_PARAMETER, RtecEventComm::EventSet, and push_nocopy().
00075 {
00076 RtecEventComm::EventSet event_copy = event;
00077 this->push_nocopy (proxy, consumer, event_copy, qos_info ACE_ENV_ARG_PARAMETER);
00078 }
|
|
||||||||||||||||||||
|
Definition at line 81 of file EC_RTCORBA_Dispatching.cpp. References ACE_CHECK, ACE_ENV_ARG_PARAMETER, ACE_ENV_SINGLE_ARG_PARAMETER, RtecEventComm::EventSet, lanes_, and TAO_EC_Dispatching_Task::push(). Referenced by push().
00086 {
00087 RTCORBA::Priority current_priority =
00088 this->current_->the_priority (ACE_ENV_SINGLE_ARG_PARAMETER);
00089 ACE_CHECK;
00090
00091 for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i)
00092 {
00093 if (this->lanes_[i].lane_priority != current_priority)
00094 continue;
00095
00096 // @@ If there were no threads available we may need to create
00097 // some...
00098
00099 this->tasks_[i].push (proxy, consumer, event
00100 ACE_ENV_ARG_PARAMETER);
00101 ACE_CHECK;
00102 break;
00103 }
00104 }
|
|
|
Deactivate any internal threads and cleanup internal data structures, it should only return once the threads have finished their jobs. Implements TAO_EC_Dispatching. Definition at line 53 of file EC_RTCORBA_Dispatching.cpp. References lanes_, ACE_Thread_Manager::num_threads_in_task(), ACE_Task< ACE_SYNCH >::putq(), and ACE_Thread_Manager::wait().
00054 {
00055 for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i)
00056 {
00057 int nthreads =
00058 this->thread_manager_.num_threads_in_task (&this->tasks_[i]);
00059 if (nthreads <= 0)
00060 continue;
00061 for (int j = 0; j != nthreads; ++j)
00062 {
00063 this->tasks_[i].putq (new TAO_EC_Shutdown_Task_Command);
00064 }
00065 }
00066 this->thread_manager_.wait ();
00067 }
|
|
|
Used to get the current RTCORBA priority.
Definition at line 70 of file EC_RTCORBA_Dispatching.h. |
|
|
The thread pools...
Definition at line 64 of file EC_RTCORBA_Dispatching.h. Referenced by activate(), push_nocopy(), shutdown(), and TAO_EC_RTCORBA_Dispatching(). |
|
|
Used to map between CORBA and native priorities.
Definition at line 67 of file EC_RTCORBA_Dispatching.h. Referenced by activate(). |
|
|
The dispatching task(s), one per lane.
Definition at line 76 of file EC_RTCORBA_Dispatching.h. |
|
|
Use our own thread manager.
Definition at line 73 of file EC_RTCORBA_Dispatching.h. |
1.3.6