ACE  6.3.3
Public Member Functions | List of all members
ACE_Dev_Poll_Reactor_Notify Class Reference

Event handler used for unblocking the ACE_Dev_Poll_Reactor from its event loop. More...

#include <Dev_Poll_Reactor.h>

Inheritance diagram for ACE_Dev_Poll_Reactor_Notify:
Inheritance graph
[legend]
Collaboration diagram for ACE_Dev_Poll_Reactor_Notify:
Collaboration graph
[legend]

Public Member Functions

 ACE_Dev_Poll_Reactor_Notify (void)
 Constructor. More...
 
- Public Member Functions inherited from ACE_Event_Handler
virtual ~ACE_Event_Handler (void)
 Destructor is virtual to enable proper cleanup. More...
 
virtual ACE_HANDLE get_handle (void) const
 Get the I/O handle. More...
 
virtual void set_handle (ACE_HANDLE)
 Set the I/O handle. More...
 
virtual int priority (void) const
 
virtual void priority (int priority)
 Set the priority of the Event_Handler. More...
 
virtual int handle_output (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_exception (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 Called when an exceptional events occur (e.g., SIGURG). More...
 
virtual int handle_timeout (const ACE_Time_Value &current_time, const void *act=0)
 
virtual int handle_exit (ACE_Process *)
 Called when a process exits. More...
 
virtual int handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
 
virtual int handle_signal (int signum, siginfo_t *=0, ucontext_t *=0)
 
virtual int resume_handler (void)
 
virtual int handle_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual int handle_group_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual void reactor (ACE_Reactor *reactor)
 Set the event demultiplexors. More...
 
virtual ACE_Reactorreactor (void) const
 Get the event demultiplexors. More...
 
virtual ACE_Reactor_Timer_Interfacereactor_timer_interface (void) const
 Get only the reactor's timer related interface. More...
 
virtual Reference_Count add_reference (void)
 Increment reference count on the handler. More...
 
virtual Reference_Count remove_reference (void)
 Decrement reference count on the handler. More...
 
Reference_Counting_Policyreference_counting_policy (void)
 Current Reference_Counting_Policy. More...
 

Initialization and Termination Methods

Methods called when initializing and terminating this event handler.

ACE_Dev_Poll_Reactordp_reactor_
 
ACE_Pipe notification_pipe_
 
int max_notify_iterations_
 
virtual int open (ACE_Reactor_Impl *, ACE_Timer_Queue *timer_queue=0, int disable_notify=0)
 
virtual int close (void)
 
virtual int notify (ACE_Event_Handler *eh=0, ACE_Reactor_Mask mask=ACE_Event_Handler::EXCEPT_MASK, ACE_Time_Value *timeout=0)
 
virtual int dispatch_notifications (int &number_of_active_handles, ACE_Handle_Set &rd_mask)
 
virtual ACE_HANDLE notify_handle (void)
 
virtual int is_dispatchable (ACE_Notification_Buffer &buffer)
 Verify whether the buffer has dispatchable info or not. More...
 
virtual int dispatch_notify (ACE_Notification_Buffer &buffer)
 
virtual int read_notify_pipe (ACE_HANDLE handle, ACE_Notification_Buffer &buffer)
 
virtual int handle_input (ACE_HANDLE handle)
 
virtual void max_notify_iterations (int)
 
virtual int max_notify_iterations (void)
 
virtual int purge_pending_notifications (ACE_Event_Handler *=0, ACE_Reactor_Mask=ACE_Event_Handler::ALL_EVENTS_MASK)
 
virtual void dump (void) const
 Dump the state of an object. More...
 
int dequeue_one (ACE_Notification_Buffer &nb)
 

Additional Inherited Members

- Public Types inherited from ACE_Event_Handler
enum  {
  LO_PRIORITY = 0, HI_PRIORITY = 10, NULL_MASK = 0, READ_MASK = (1 << 0),
  WRITE_MASK = (1 << 1), EXCEPT_MASK = (1 << 2), ACCEPT_MASK = (1 << 3), CONNECT_MASK = (1 << 4),
  TIMER_MASK = (1 << 5), QOS_MASK = (1 << 6), GROUP_QOS_MASK = (1 << 7), SIGNAL_MASK = (1 << 8),
  ALL_EVENTS_MASK, RWE_MASK, DONT_CALL = (1 << 9)
}
 
enum  { ACE_EVENT_HANDLER_NOT_RESUMED = -1, ACE_REACTOR_RESUMES_HANDLER = 0, ACE_APPLICATION_RESUMES_HANDLER }
 
typedef long Reference_Count
 Reference count type. More...
 
- Static Public Member Functions inherited from ACE_Event_Handler
static ACE_THR_FUNC_RETURN read_adapter (void *event_handler)
 
static int register_stdin_handler (ACE_Event_Handler *eh, ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr, int flags=THR_DETACHED)
 
static int remove_stdin_handler (ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr)
 Performs the inverse of the register_stdin_handler() method. More...
 
- Protected Types inherited from ACE_Event_Handler
typedef ACE_Atomic_Op< ACE_SYNCH_MUTEX, Reference_CountAtomic_Reference_Count
 Typedef for implementation of reference counting. More...
 
- Protected Member Functions inherited from ACE_Event_Handler
 ACE_Event_Handler (ACE_Reactor *=0, int priority=ACE_Event_Handler::LO_PRIORITY)
 Force ACE_Event_Handler to be an abstract base class. More...
 
- Protected Attributes inherited from ACE_Event_Handler
Atomic_Reference_Count reference_count_
 Reference count. More...
 

Detailed Description

Event handler used for unblocking the ACE_Dev_Poll_Reactor from its event loop.

This event handler is used internally by the ACE_Dev_Poll_Reactor as a means to allow a thread other then the one running the event loop to unblock the event loop.

Constructor & Destructor Documentation

ACE_Dev_Poll_Reactor_Notify::ACE_Dev_Poll_Reactor_Notify ( void  )

Constructor.

Member Function Documentation

int ACE_Dev_Poll_Reactor_Notify::close ( void  )
virtual

Keep a back pointer to the ACE_Dev_Poll_Reactor. If this value if NULL then the ACE_Dev_Poll_Reactor has been initialized with disable_notify_pipe.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::dequeue_one ( ACE_Notification_Buffer nb)

Method called by ACE_Dev_Poll_Reactor to obtain one notification. THIS METHOD MUST BE CALLED WITH THE REACTOR TOKEN HELD!

Returns
-1 on error, else 0 and
  • nb has the notify to dispatch. Note that the contained event handler may be 0 if there were only wake-ups (no handlers to dispatch).
int ACE_Dev_Poll_Reactor_Notify::dispatch_notifications ( int &  number_of_active_handles,
ACE_Handle_Set rd_mask 
)
virtual

Unimplemented method required by pure virtual method in abstract base class. This method's interface is not very compatibile with this Reactor's design. It's not clear why this method is pure virtual either.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::dispatch_notify ( ACE_Notification_Buffer buffer)
virtual

Handle one notify call represented in buffer. This could be because of a thread trying to unblock the Reactor_Impl.

Implements ACE_Reactor_Notify.

void ACE_Dev_Poll_Reactor_Notify::dump ( void  ) const
virtual

Dump the state of an object.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::handle_input ( ACE_HANDLE  handle)
virtual

Called back by the ACE_Dev_Poll_Reactor when a thread wants to unblock us.

Reimplemented from ACE_Event_Handler.

int ACE_Dev_Poll_Reactor_Notify::is_dispatchable ( ACE_Notification_Buffer buffer)
virtual

Verify whether the buffer has dispatchable info or not.

Implements ACE_Reactor_Notify.

void ACE_Dev_Poll_Reactor_Notify::max_notify_iterations ( int  iterations)
virtual

Set the maximum number of times that the handle_input method will iterate and dispatch the ACE_Event_Handlers that are passed in via the notify queue before breaking out of the event loop. By default, this is set to -1, which means "iterate until the queue is empty." Setting this to a value like "1 or 2" will increase "fairness" (and thus prevent starvation) at the expense of slightly higher dispatching overhead.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::max_notify_iterations ( void  )
virtual

Get the maximum number of times that the handle_input method will iterate and dispatch the ACE_Event_Handlers that are passed in via the notify queue before breaking out of its event loop.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::notify ( ACE_Event_Handler eh = 0,
ACE_Reactor_Mask  mask = ACE_Event_Handler::EXCEPT_MASK,
ACE_Time_Value timeout = 0 
)
virtual

Called by a thread when it wants to unblock the Reactor_Impl. This wakes up the Reactor_Impl if currently blocked. Pass over both the Event_Handler and the mask to allow the caller to dictate which Event_Handler method the Reactor_Impl will invoke. The ACE_Time_Value indicates how long to block trying to notify the Reactor_Impl. If timeout == 0, the caller will block until action is possible, else will wait until the relative time specified in *timeout elapses).

Implements ACE_Reactor_Notify.

ACE_HANDLE ACE_Dev_Poll_Reactor_Notify::notify_handle ( void  )
virtual

Returns the ACE_HANDLE of the notify pipe on which the reactor is listening for notifications so that other threads can unblock the Reactor_Impl.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::open ( ACE_Reactor_Impl r,
ACE_Timer_Queue timer_queue = 0,
int  disable_notify = 0 
)
virtual

Keep a back pointer to the ACE_Dev_Poll_Reactor. If this value if NULL then the ACE_Dev_Poll_Reactor has been initialized with disable_notify_pipe.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::purge_pending_notifications ( ACE_Event_Handler eh = 0,
ACE_Reactor_Mask  mask = ACE_Event_Handler::ALL_EVENTS_MASK 
)
virtual

Purge any notifications pending in this reactor for the specified ACE_Event_Handler object. Returns the number of notifications purged. Returns -1 on error.

Implements ACE_Reactor_Notify.

int ACE_Dev_Poll_Reactor_Notify::read_notify_pipe ( ACE_HANDLE  handle,
ACE_Notification_Buffer buffer 
)
virtual

Read one notify call on the handle into buffer. This could be because of a thread trying to unblock the Reactor_Impl.

Implements ACE_Reactor_Notify.

Member Data Documentation

ACE_Dev_Poll_Reactor* ACE_Dev_Poll_Reactor_Notify::dp_reactor_
protected

Keep a back pointer to the ACE_Dev_Poll_Reactor. If this value if NULL then the ACE_Dev_Poll_Reactor has been initialized with disable_notify_pipe.

int ACE_Dev_Poll_Reactor_Notify::max_notify_iterations_
protected

Keeps track of the maximum number of times that the ACE_Dev_Poll_Reactor_Notify::handle_input method will iterate and dispatch the ACE_Event_Handlers that are passed in via the notify pipe before breaking out of its recv loop. By default, this is set to -1, which means "iterate until the pipe is empty."

ACE_Pipe ACE_Dev_Poll_Reactor_Notify::notification_pipe_
protected

Contains the ACE_HANDLE the ACE_Dev_Poll_Reactor is listening on, as well as the ACE_HANDLE that threads wanting the attention of the ACE_Dev_Poll_Reactor will write to.


The documentation for this class was generated from the following files: