TAO_CEC_Dispatching_Task Class Reference

Implement the dispatching queues for FIFO and Priority dispatching. More...

#include <CEC_Dispatching_Task.h>

Inheritance diagram for TAO_CEC_Dispatching_Task:

Inheritance graph
[legend]
Collaboration diagram for TAO_CEC_Dispatching_Task:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_CEC_Dispatching_Task (ACE_Thread_Manager *thr_manager=0)
 Constructor.

virtual int svc (void)
 Process the events in the queue.

virtual void push (TAO_CEC_ProxyPushSupplier *proxy, CORBA::Any &event ACE_ENV_ARG_DECL)

Private Attributes

ACE_Allocatorallocator_
 An per-task allocator.

ACE_Locked_Data_Block< ACE_Lock_Adapter<
TAO_SYNCH_MUTEX > > 
data_block_
 Helper data structure to minimize memory allocations...


Detailed Description

Implement the dispatching queues for FIFO and Priority dispatching.

Definition at line 47 of file CEC_Dispatching_Task.h.


Constructor & Destructor Documentation

TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE TAO_CEC_Dispatching_Task::TAO_CEC_Dispatching_Task ACE_Thread_Manager thr_manager = 0  ) 
 

Constructor.

Definition at line 9 of file CEC_Dispatching_Task.i.

References ACE_SYNCH.

00010   :  ACE_Task<ACE_SYNCH> (thr_manager),
00011      allocator_ (0)
00012 {
00013 }


Member Function Documentation

void TAO_CEC_Dispatching_Task::push TAO_CEC_ProxyPushSupplier proxy,
CORBA::Any &event  ACE_ENV_ARG_DECL
[virtual]
 

Definition at line 65 of file CEC_Dispatching_Task.cpp.

References ACE_THROW, ACE_Allocator::instance(), ACE_Allocator::malloc(), and ACE_Task< ACE_SYNCH >::putq().

Referenced by TAO_CEC_MT_Dispatching::push_nocopy().

00068 {
00069   if (this->allocator_ == 0)
00070     this->allocator_ = ACE_Allocator::instance ();
00071 
00072   void* buf = this->allocator_->malloc (sizeof (TAO_CEC_Push_Command));
00073 
00074   if (buf == 0)
00075     ACE_THROW (CORBA::NO_MEMORY (TAO::VMCID,
00076                                  CORBA::COMPLETED_NO));
00077 
00078   ACE_Message_Block *mb =
00079     new (buf) TAO_CEC_Push_Command (proxy,
00080                                     event,
00081                                     this->data_block_.duplicate (),
00082                                     this->allocator_);
00083   this->putq (mb);
00084 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL int TAO_CEC_Dispatching_Task::svc void   )  [virtual]
 

Process the events in the queue.

Reimplemented from ACE_Task_Base.

Definition at line 22 of file CEC_Dispatching_Task.cpp.

References ACE_ANY_EXCEPTION, ACE_CATCHANY, ACE_ENDTRY, ACE_ENV_SINGLE_ARG_PARAMETER, ACE_ERROR, ACE_PRINT_EXCEPTION, ACE_TRY_CHECK, ACE_TRY_NEW_ENV, ESHUTDOWN, TAO_CEC_Dispatch_Command::execute(), ACE_Task< ACE_SYNCH >::getq(), ACE_OS::last_error(), LM_ERROR, and ACE_Message_Block::release().

00023 {
00024   int done = 0;
00025   while (!done)
00026     {
00027       ACE_TRY_NEW_ENV
00028         {
00029           ACE_Message_Block *mb;
00030           if (this->getq (mb) == -1)
00031             if (ACE_OS::last_error () == ESHUTDOWN)
00032               return 0;
00033           else
00034             ACE_ERROR ((LM_ERROR,
00035                         "EC (%P|%t) getq error in Dispatching Queue\n"));
00036 
00037           TAO_CEC_Dispatch_Command *command =
00038             dynamic_cast<TAO_CEC_Dispatch_Command*> (mb);
00039 
00040           if (command == 0)
00041             {
00042               ACE_Message_Block::release (mb);
00043               continue;
00044             }
00045 
00046           int result = command->execute (ACE_ENV_SINGLE_ARG_PARAMETER);
00047           ACE_TRY_CHECK;
00048 
00049           ACE_Message_Block::release (mb);
00050 
00051           if (result == -1)
00052             done = 1;
00053         }
00054       ACE_CATCHANY
00055         {
00056           ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
00057                                "EC (%P|%t) exception in dispatching queue");
00058         }
00059       ACE_ENDTRY;
00060     }
00061   return 0;
00062 }


Member Data Documentation

ACE_Allocator* TAO_CEC_Dispatching_Task::allocator_ [private]
 

An per-task allocator.

Definition at line 68 of file CEC_Dispatching_Task.h.

ACE_Locked_Data_Block<ACE_Lock_Adapter<TAO_SYNCH_MUTEX> > TAO_CEC_Dispatching_Task::data_block_ [private]
 

Helper data structure to minimize memory allocations...

Definition at line 71 of file CEC_Dispatching_Task.h.


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 13:19:23 2006 for TAO_CosEvent by doxygen 1.3.6