GenApi  3.5.1
Synch.h
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // (c) 2006 by Basler Vision Technologies
3 // Author: Hartmut Nebelung
4 //
5 // License: This file is published under the license of the EMVA GenICam Standard Group.
6 // A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
7 // If for some reason you are missing this file please contact the EMVA or visit the website
8 // (http://www.genicam.org) for a full copy.
9 //
10 // THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
11 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
12 // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
13 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
14 // OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
15 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
16 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
17 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
18 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
20 // POSSIBILITY OF SUCH DAMAGE.
21 //
22 //-----------------------------------------------------------------------------
29 #ifndef GENAPI_SYNCH_H
30 #define GENAPI_SYNCH_H
31 
32 #include <GenApi/GenApiDll.h>
33 #include <Base/GCException.h>
34 
35 #if defined (_WIN32)
36 # include <windows.h>
37 # include <winbase.h>
38 #elif defined (__GNUC__) && (defined (__linux__) || defined (__APPLE__))
39 # include <pthread.h>
40 # include <errno.h>
41 # include <list>
42 #elif defined(VXWORKS)
43  #include <vxworks.h>
44  #include <intLib.h>
45  #include <taskLib.h>
46 #else
47 # error No/unknown platform thread support
48 #endif
49 
50 namespace GENAPI_NAMESPACE
51 {
52 
53  //-----------------------------------------------------------------
54  // CLock
55  //-----------------------------------------------------------------
56 
61  class GENAPI_DECL CLock
62  {
63  public:
65  CLock();
66 
68  ~CLock();
69 
71  bool TryLock();
72 
74  void Lock();
75 
77  void Unlock();
78 
79  private:
81  CLock( const CLock& );
82 
84  CLock& operator=( const CLock& );
85 
86  protected:
87 
88 #if defined (_WIN32)
89  CRITICAL_SECTION m_csObject;
91 #elif defined (__GNUC__) && (defined (__linux__) || defined (__APPLE__))
92  pthread_mutex_t m_mtxObject;
94 #elif defined(VXWORKS)
95  SEM_ID m_sem;
96 #else
97 # error No/unknown platform thread support
98 #endif
99 
100  };
101 
102 
106  class GENAPI_DECL CLockEx : public CLock
107  {
108  public:
109 
110 # if defined (_WIN32)
111 
113  int64_t GetLockCount();
114 
116  int64_t GetRecursionCount();
117 
118 # elif defined (__GNUC__) && (defined (__linux__) || defined (__APPLE__) || defined(VXWORKS))
119  // nothing implemented for Unix
120 # else
121 # error No/unknown platform support
122 # endif
123 
124  private:
126  CLockEx( const CLockEx& );
127 
129  CLockEx& operator=( const CLockEx& );
130 
131  };
132 
133 
134  //-----------------------------------------------------------------
135  // AutoLock
136  //-----------------------------------------------------------------
137  class AutoLock
138  {
139  CLock& m_Lock;
140  public:
141  AutoLock(CLock& lock)
142  : m_Lock(lock)
143  {
144  m_Lock.Lock();
145  }
146 
147  ~AutoLock()
148  {
149  m_Lock.Unlock();
150  }
151 
152  private:
153  AutoLock& operator=(const AutoLock&);
154  AutoLock(const AutoLock&);
155  };
156 
157 
158  //-----------------------------------------------------------------
159  // template LockableObject<Object,ThreadingModel>
160  //-----------------------------------------------------------------
161 
166  template< class Object>
168  {
169  public:
170  mutable CLock m_Lock;
171 
172  class Lock;
173  friend class Lock;
174 
179  class Lock
180  {
182  const LockableObject<Object> &m_Object;
183  public:
184  Lock( const LockableObject<Object>& obj) : m_Object(obj) {
185  m_Object.m_Lock.Lock();
186  }
187 
188  ~Lock(){
189  m_Object.m_Lock.Unlock();
190  }
191  private:
192  Lock& operator=( const Lock& );
193  };
194 
196  Lock GetLock() const
197  {
198  return Lock( *this );
199  }
200  };
201 
202 } // namespace GenApi
203 
204 #endif // GENAPI_SYNCH_H
Lock GetLock() const
Get a new lock.
Definition: Synch.h:196
void Lock()
enters the critical section (may block)
void Unlock()
leaves the critical section
virtual IBoolean & operator=(bool Value)
Set node value.
Definition: IBoolean.h:62
Standard GenICam Exceptions.
declspec&#39;s to be used for GenApi Windows dll
Definition: Synch.h:106
Definition: ChunkAdapter.h:37
Instance-Lock for an object.
Definition: Synch.h:167
A lock class.
Definition: Synch.h:61