1#ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H 2#define CPPUNIT_SYNCHRONIZEDOBJECT_H 3 4#include <cppunit/Portability.h> 5 6 7namespace CppUnit 8{ 9 10/*! \brief Base class for synchronized object. 11 * 12 * Synchronized object are object which members are used concurrently by mutiple 13 * threads. 14 * 15 * This class define the class SynchronizationObject which must be subclassed 16 * to implement an actual lock. 17 * 18 * Each instance of this class holds a pointer on a lock object. 19 * 20 * See src/msvc6/MfcSynchronizedObject.h for an example. 21 */ 22class CPPUNIT_API SynchronizedObject 23{ 24public: 25 /*! \brief Abstract synchronization object (mutex) 26 */ 27 class SynchronizationObject 28 { 29 public: 30 SynchronizationObject() {} 31 virtual ~SynchronizationObject() {} 32 33 virtual void lock() {} 34 virtual void unlock() {} 35 }; 36 37 /*! Constructs a SynchronizedObject object. 38 */ 39 SynchronizedObject( SynchronizationObject *syncObject =0 ); 40 41 /// Destructor. 42 virtual ~SynchronizedObject(); 43 44protected: 45 /*! \brief Locks a synchronization object in the current scope. 46 */ 47 class ExclusiveZone 48 { 49 SynchronizationObject *m_syncObject; 50 51 public: 52 ExclusiveZone( SynchronizationObject *syncObject ) 53 : m_syncObject( syncObject ) 54 { 55 m_syncObject->lock(); 56 } 57 58 ~ExclusiveZone() 59 { 60 m_syncObject->unlock (); 61 } 62 }; 63 64 virtual void setSynchronizationObject( SynchronizationObject *syncObject ); 65 66protected: 67 SynchronizationObject *m_syncObject; 68 69private: 70 /// Prevents the use of the copy constructor. 71 SynchronizedObject( const SynchronizedObject © ); 72 73 /// Prevents the use of the copy operator. 74 void operator =( const SynchronizedObject © ); 75}; 76 77 78 79} // namespace CppUnit 80 81 82#endif // CPPUNIT_SYNCHRONIZEDOBJECT_H 83