00001 #ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H
00002 #define CPPUNIT_SYNCHRONIZEDOBJECT_H
00003
00004 #include <cppunit/Portability.h>
00005
00006
00007 namespace CppUnit
00008 {
00009
00022 class CPPUNIT_API SynchronizedObject
00023 {
00024 public:
00027 class SynchronizationObject
00028 {
00029 public:
00030 SynchronizationObject() {}
00031 virtual ~SynchronizationObject() {}
00032
00033 virtual void lock() {}
00034 virtual void unlock() {}
00035 };
00036
00039 SynchronizedObject( SynchronizationObject *syncObject =0 );
00040
00042 virtual ~SynchronizedObject();
00043
00044 protected:
00047 class ExclusiveZone
00048 {
00049 SynchronizationObject *m_syncObject;
00050
00051 public:
00052 ExclusiveZone( SynchronizationObject *syncObject )
00053 : m_syncObject( syncObject )
00054 {
00055 m_syncObject->lock();
00056 }
00057
00058 ~ExclusiveZone()
00059 {
00060 m_syncObject->unlock ();
00061 }
00062 };
00063
00064 virtual void setSynchronizationObject( SynchronizationObject *syncObject );
00065
00066 protected:
00067 SynchronizationObject *m_syncObject;
00068
00069 private:
00071 SynchronizedObject( const SynchronizedObject © );
00072
00074 void operator =( const SynchronizedObject © );
00075 };
00076
00077
00078
00079 }
00080
00081
00082 #endif // CPPUNIT_SYNCHRONIZEDOBJECT_H