source: trunk/contrib/cppunit-1.12.2/include/cppunit/SynchronizedObject.h @ 876

Last change on this file since 876 was 876, checked in by sam, 9 years ago

contrib: add a precompiled Win32 version of CppUnit and update build system
accordingly.

File size: 1.7 KB
Line 
1#ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H
2#define CPPUNIT_SYNCHRONIZEDOBJECT_H
3
4#include <cppunit/Portability.h>
5
6
7CPPUNIT_NS_BEGIN
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 &copy );
72
73  /// Prevents the use of the copy operator.
74  void operator =( const SynchronizedObject &copy );
75};
76
77
78CPPUNIT_NS_END
79
80#endif  // CPPUNIT_SYNCHRONIZEDOBJECT_H
Note: See TracBrowser for help on using the repository browser.