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
50namespace GENAPI_NAMESPACE
51{
52
53 //-----------------------------------------------------------------
54 // CLock
55 //-----------------------------------------------------------------
56
61 class GENAPI_DECL CLock
62 {
63 public:
66
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)
90 CRITICAL_SECTION m_csObject;
91#elif defined (__GNUC__) && (defined (__linux__) || defined (__APPLE__))
93 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
Standard GenICam Exceptions.
declspec's to be used for GenApi Windows dll
virtual IBoolean & operator=(bool Value)
Set node value.
Definition IBoolean.h:62
Definition Synch.h:107
A lock class.
Definition Synch.h:62
bool TryLock()
tries to enter the critical section; returns true if successful
void Lock()
enters the critical section (may block)
void Unlock()
leaves the critical section
Instance-Lock for an object.
Definition Synch.h:168
Lock GetLock() const
Get a new lock.
Definition Synch.h:196