|
Packit Service |
e31359 |
#ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H
|
|
Packit Service |
e31359 |
#define CPPUNIT_SYNCHRONIZEDOBJECT_H
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
#include <cppunit/Portability.h>
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
CPPUNIT_NS_BEGIN
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
/*! \brief Base class for synchronized object.
|
|
Packit Service |
e31359 |
*
|
|
Packit Service |
e31359 |
* Synchronized object are object which members are used concurrently by mutiple
|
|
Packit Service |
e31359 |
* threads.
|
|
Packit Service |
e31359 |
*
|
|
Packit Service |
e31359 |
* This class define the class SynchronizationObject which must be subclassed
|
|
Packit Service |
e31359 |
* to implement an actual lock.
|
|
Packit Service |
e31359 |
*
|
|
Packit Service |
e31359 |
* Each instance of this class holds a pointer on a lock object.
|
|
Packit Service |
e31359 |
*
|
|
Packit Service |
e31359 |
* See src/msvc6/MfcSynchronizedObject.h for an example.
|
|
Packit Service |
e31359 |
*/
|
|
Packit Service |
e31359 |
class CPPUNIT_API SynchronizedObject
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
public:
|
|
Packit Service |
e31359 |
/*! \brief Abstract synchronization object (mutex)
|
|
Packit Service |
e31359 |
*/
|
|
Packit Service |
e31359 |
class SynchronizationObject
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
public:
|
|
Packit Service |
e31359 |
SynchronizationObject() {}
|
|
Packit Service |
e31359 |
virtual ~SynchronizationObject() {}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
virtual void lock() {}
|
|
Packit Service |
e31359 |
virtual void unlock() {}
|
|
Packit Service |
e31359 |
};
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
/*! Constructs a SynchronizedObject object.
|
|
Packit Service |
e31359 |
*/
|
|
Packit Service |
e31359 |
SynchronizedObject( SynchronizationObject *syncObject =0 );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
/// Destructor.
|
|
Packit Service |
e31359 |
virtual ~SynchronizedObject();
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
protected:
|
|
Packit Service |
e31359 |
/*! \brief Locks a synchronization object in the current scope.
|
|
Packit Service |
e31359 |
*/
|
|
Packit Service |
e31359 |
class ExclusiveZone
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
SynchronizationObject *m_syncObject;
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
public:
|
|
Packit Service |
e31359 |
ExclusiveZone( SynchronizationObject *syncObject )
|
|
Packit Service |
e31359 |
: m_syncObject( syncObject )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
m_syncObject->lock();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
~ExclusiveZone()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
m_syncObject->unlock ();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
private:
|
|
Packit Service |
e31359 |
/// Prevents the use of the copy constructor.
|
|
Packit Service |
e31359 |
ExclusiveZone( const ExclusiveZone& );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
/// Prevents the use of the copy operator.
|
|
Packit Service |
e31359 |
ExclusiveZone& operator=( const ExclusiveZone& );
|
|
Packit Service |
e31359 |
};
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
virtual void setSynchronizationObject( SynchronizationObject *syncObject );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
protected:
|
|
Packit Service |
e31359 |
SynchronizationObject *m_syncObject;
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
private:
|
|
Packit Service |
e31359 |
/// Prevents the use of the copy constructor.
|
|
Packit Service |
e31359 |
SynchronizedObject( const SynchronizedObject © );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
/// Prevents the use of the copy operator.
|
|
Packit Service |
e31359 |
void operator =( const SynchronizedObject © );
|
|
Packit Service |
e31359 |
};
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
CPPUNIT_NS_END
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
#endif // CPPUNIT_SYNCHRONIZEDOBJECT_H
|