SynchronizedObject.h 1.7 KB

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