You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by mc...@apache.org on 2004/04/02 10:31:26 UTC

cvs commit: logging-log4cxx/include/log4cxx/helpers event.h

mcatan      2004/04/02 00:31:26

  Added:       include/log4cxx/helpers event.h
  Log:
  added class Event (synchronization object)
  
  Revision  Changes    Path
  1.1                  logging-log4cxx/include/log4cxx/helpers/event.h
  
  Index: event.h
  ===================================================================
  /***************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.      *
   *                                                                         *
   * This software is published under the terms of the Apache Software       *
   * License version 1.1, a copy of which has been included with this        *
   * distribution in the license.apl file.                                   *
   ***************************************************************************/
   
  #ifndef _LOG4CXX_HELPERS_EVENT_H
  #define _LOG4CXX_HELPERS_EVENT_H
   
  #include <log4cxx/config.h>
  #include <log4cxx/helpers/exception.h>
  
  #ifdef HAVE_PTHREAD
  #include <pthread.h>
  #endif
   
  namespace log4cxx
  {
  	namespace helpers
  	{
  		class LOG4CXX_EXPORT EventException : public Exception
  		{
  		public:
  			EventException(const String& message) : Exception(message)
  			{
  			}
  		};
  		
  		/**
  		Object to be used to synchronize threads
  		
  		An event is signalled with set().  If the new event is
  		a manual reset event, it remains signalled until it is reset
  		with reset().  An auto reset event remains signalled until a
  		single thread has waited for it, at which time the event handle is
  		automatically reset to unsignalled.
  		*/
  		class LOG4CXX_EXPORT Event
  		{
  		public:
  			/** 
  			Creates a new event
  			
  			@param manualReset Specifies whether the new event has manual or auto
  			reset behaviour.
  			@param initialState Specifies whether the new event handle is initially
   			signalled or not
  			*/
  			Event(bool manualReset, bool initialState);
  			
  			/**
  			Destroy the event
  			*/
  			~Event();
  			
  			/**
  			Sets the event to the signalled state.
  
  			If the event is a manual reset event, it remains signalled until it
  			is reset with Reset().  An auto reset event remains signalled
  			until a single thread has waited for it, at which time the event is
  			automatically reset to unsignalled.
  			*/
  			void set();
  			
  			/** 
  			Resets the event to the unsignalled state
  			*/
  			void reset();
  			
  			/** 
  			Wait for the event to be set
  			
  			This method immediatly returns if the event is already set
  			*/
  			void wait();
  			
  		protected:
  #ifdef HAVE_PTHREAD
  			pthread_cond_t condition;
  			pthread_mutex_t mutex;
  			bool state;
  			bool manualReset;
  #elif defined(HAVE_MS_THREAD)
  			void * event;
  #endif 
  		}; // class Event
  	}; // namespace helpers
  }; // namespace log4cx
  
  #endif //_LOG4CXX_HELPERS_EVENT_H