Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
p6lock.h
Go to the documentation of this file.
1 
16 #ifndef P6LOCK_H__
17 #define P6LOCK_H__ 1
18 
19 #include "p6com.h"
20 
21 
22 
23 #ifdef __cplusplus
24 namespace P6R {
25 extern "C" {
26 #endif
27 
28 
40  #undef INTERFACE
41  #define INTERFACE p6ILock
43  {
44  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
46  P6DECLCOMMETHOD(unlock)(P6THIS) P6PURE;
47  };
48  #define IF_p6ILock {0xD855D877,0x1196,0x4444,{0xAF,0x2B,0xA1,0x80,0x5C,0xA5,0x88,0x0B}}
49  #define COMP_p6Lock {0xC6E9AC1E,0xAC4D,0x46c8,{0xAE,0xB7,0x76,0x8A,0xDD,0xD2,0x43,0x7C}}
50 
78  #undef INTERFACE
79  #define INTERFACE p6IMonitor
81  {
91  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
92 
113 
123  P6DECLCOMMETHOD(unlock)(P6THIS) P6PURE;
124 
125 
135 
150  P6DECLCOMMETHOD(waitTimed)(P6THIS_ P6INTERVAL tTimeout) P6PURE;
151 
158  P6DECLCOMMETHOD(notify)(P6THIS) P6PURE;
165  P6DECLCOMMETHOD(notifyAll)(P6THIS) P6PURE;
166  };
167  #define IF_p6IMonitor {0xAC0338DF,0x9B66,0x4c30,{0x89,0x4D,0x95,0x03,0x3B,0xD0,0xD6,0x82}}
168  #define COMP_p6Monitor {0xDEE214DF,0xAA66,0x4c0c,{0xA2,0x11,0x41,0x4A,0xDB,0x8F,0xBF,0x8A}}
169 
170 
197  #undef INTERFACE
198  #define INTERFACE p6ICondvar
200  {
212  P6DECLCOMMETHOD(initialize)(P6THIS_ p6ILock *pLock) P6PURE;
213 
220 
221 
222  P6DECLCOMMETHOD(waitTimed)(P6THIS_ P6INTERVAL tTimeout) P6PURE;
223 
230  P6DECLCOMMETHOD(notify)(P6THIS) P6PURE;
231 
237  P6DECLCOMMETHOD(notifyAll)(P6THIS) P6PURE;
238  };
239  // {F50FA083-1363-464C-8E25-F571966D366E}
240  #define IF_p6ICondvar {0xF50FA083,0x1363,0x464C,{0x8E,0x25,0xF5,0x71,0x96,0x6D,0x36,0x6E}}
241  // {716C57F7-6A1C-41EC-8FB7-F20DC10B6D51}
242  #define COMP_p6Condvar {0x716C57F7,0x6A1C,0x41EC,{0x8F,0xB7,0xF2,0x0D,0xC1,0x0B,0x6D,0x51}}
243 
259  #undef INTERFACE
260  #define INTERFACE p6IRWLock
262  {
263 
270  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
271  P6DECLCOMMETHOD(readLock)(P6THIS) P6PURE;
272  P6DECLCOMMETHOD(writeLock)(P6THIS) P6PURE;
273  P6DECLCOMMETHOD(unlock)(P6THIS) P6PURE;
274  };
275  #define IF_p6IRWLock {0xE3FF0744,0x6679,0x4f90,{0xBA,0xDD,0x3A,0xB7,0xDB,0xE3,0xB6,0xEA}}
276  #define COMP_p6RWLock {0x2A9246EA,0x6D01,0x42de,{0xAE,0xC9,0xDA,0x5B,0x66,0x19,0xF4,0xF5}}
277 
283  typedef enum {
286  } P6RWLOCKMODE;
287 
288 #ifdef __cplusplus
289 } // extern "C"
290 } // namespace
291 #endif
292 
293 
294 #ifdef __cplusplus
295 namespace P6R {
296 
303  {
304  public:
305  P6StackRWLock(p6IRWLock *pLock,P6RWLOCKMODE mode) : m_pLock(pLock), m_mode(mode)
306  {
307  if(m_pLock) {
308  m_pLock->addref();
309  if(P6WRITE_LOCK == m_mode) {
310  m_pLock->writeLock();
311  }
312  else {
313  m_pLock->readLock();
314  }
315  }
316  }
318  {
319  if(m_pLock) {
320  m_pLock->unlock();
321  m_pLock->release();
322  m_pLock = NULL;
323  }
324  }
325 
326  protected:
329 
330  private:
335  P6StackRWLock& operator=(const P6StackRWLock &);
336  P6StackRWLock(const P6StackRWLock &);
337  };
338 
340  {
341  public:
342  P6StackMonitor(p6IMonitor *pLock) : m_pLock(pLock)
343  { if(m_pLock) { m_pLock->addref(); m_pLock->lock();} }
345  { if(m_pLock) { m_pLock->unlock(); m_pLock->release(); } }
346 
347  protected:
349 
350  private:
354  P6StackMonitor& operator=(const P6StackMonitor &);
356  };
357 
379  {
380  public:
381  P6StackLock(p6ILock *pLock) : m_pLock(pLock)
382  { if(m_pLock) { m_pLock->addref(); m_pLock->lock();} }
384  { if(m_pLock) { m_pLock->unlock(); m_pLock->release(); } }
385 
386  protected:
388 
389  private:
393  P6StackLock& operator=(const P6StackLock &);
394  P6StackLock(const P6StackLock &);
395  };
396 
397 } // namespace
398 #endif
399 
400 #endif
A intraprocess, reentrant lock/condition variable.
Definition: p6lock.h:80
Used to specify that the P6StackRWLock should perform a write lock operation.
Definition: p6lock.h:285
#define P6PURE
Definition: p6defs.h:176
P6StackMonitor(p6IMonitor *pLock)
Definition: p6lock.h:342
Conditional variable.
Definition: p6lock.h:199
Reader/Writer locking.
Definition: p6lock.h:261
#define P6NOEXPORT
Definition: p6defs.h:104
Non-reentrant, mutual exclusion lock.
Definition: p6lock.h:42
P6RWLOCKMODE m_mode
Definition: p6lock.h:328
Stack based read/writer lock.
Definition: p6lock.h:302
The base interface all [p6]COM components must derive from and implement.
Definition: p6comdef.h:97
p6IMonitor * m_pLock
Definition: p6lock.h:348
P6StackLock(p6ILock *pLock)
Definition: p6lock.h:381
P6StackRWLock(p6IRWLock *pLock, P6RWLOCKMODE mode)
Definition: p6lock.h:305
Used to specify that the P6StackRWLock should perform a read lock operation.
Definition: p6lock.h:284
p6ILock * m_pLock
Definition: p6lock.h:387
p6IRWLock * m_pLock
Definition: p6lock.h:327
P6RWLOCKMODE
Defines the lock mode for a readers/writer stack lock.
Definition: p6lock.h:283
#define P6DECLCOMMETHOD(method)
Definition: p6defs.h:173
#define P6THIS_
Definition: p6defs.h:177
Stack based non-reentrant lock.
Definition: p6lock.h:378
P6COM definitions and interfaces.
#define P6THIS
Definition: p6defs.h:178
#define P6DECLAREIF_(iface, baseif)
Definition: p6defs.h:172