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 #include "p6filetypes.h"
21 
22 #ifdef __cplusplus
23 namespace P6R {
24 extern "C" {
25 #endif
26 
27 
39  #undef INTERFACE
40  #define INTERFACE p6ILock
42  {
43  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
45  P6DECLCOMMETHOD(unlock)(P6THIS) P6PURE;
46  };
47  #define IF_p6ILock {0xD855D877,0x1196,0x4444,{0xAF,0x2B,0xA1,0x80,0x5C,0xA5,0x88,0x0B}}
48  #define COMP_p6Lock {0xC6E9AC1E,0xAC4D,0x46c8,{0xAE,0xB7,0x76,0x8A,0xDD,0xD2,0x43,0x7C}}
49 
77  #undef INTERFACE
78  #define INTERFACE p6IMonitor
80  {
90  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
91 
112 
122  P6DECLCOMMETHOD(unlock)(P6THIS) P6PURE;
123 
124 
134 
149  P6DECLCOMMETHOD(waitTimed)(P6THIS_ P6INTERVAL tTimeout) P6PURE;
150 
157  P6DECLCOMMETHOD(notify)(P6THIS) P6PURE;
164  P6DECLCOMMETHOD(notifyAll)(P6THIS) P6PURE;
165  };
166  #define IF_p6IMonitor {0xAC0338DF,0x9B66,0x4c30,{0x89,0x4D,0x95,0x03,0x3B,0xD0,0xD6,0x82}}
167  #define COMP_p6Monitor {0xDEE214DF,0xAA66,0x4c0c,{0xA2,0x11,0x41,0x4A,0xDB,0x8F,0xBF,0x8A}}
168 
169 
196  #undef INTERFACE
197  #define INTERFACE p6ICondvar
199  {
211  P6DECLCOMMETHOD(initialize)(P6THIS_ p6ILock *pLock) P6PURE;
212 
219 
220 
221  P6DECLCOMMETHOD(waitTimed)(P6THIS_ P6INTERVAL tTimeout) P6PURE;
222 
229  P6DECLCOMMETHOD(notify)(P6THIS) P6PURE;
230 
236  P6DECLCOMMETHOD(notifyAll)(P6THIS) P6PURE;
237  };
238  // {F50FA083-1363-464C-8E25-F571966D366E}
239  #define IF_p6ICondvar {0xF50FA083,0x1363,0x464C,{0x8E,0x25,0xF5,0x71,0x96,0x6D,0x36,0x6E}}
240  // {716C57F7-6A1C-41EC-8FB7-F20DC10B6D51}
241  #define COMP_p6Condvar {0x716C57F7,0x6A1C,0x41EC,{0x8F,0xB7,0xF2,0x0D,0xC1,0x0B,0x6D,0x51}}
242 
258  #undef INTERFACE
259  #define INTERFACE p6IRWLock
261  {
262 
269  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
270  P6DECLCOMMETHOD(readLock)(P6THIS) P6PURE;
271  P6DECLCOMMETHOD(writeLock)(P6THIS) P6PURE;
272  P6DECLCOMMETHOD(unlock)(P6THIS) P6PURE;
273  };
274  #define IF_p6IRWLock {0xE3FF0744,0x6679,0x4f90,{0xBA,0xDD,0x3A,0xB7,0xDB,0xE3,0xB6,0xEA}}
275  #define COMP_p6RWLock {0x2A9246EA,0x6D01,0x42de,{0xAE,0xC9,0xDA,0x5B,0x66,0x19,0xF4,0xF5}}
276 
282  typedef enum {
285  } P6RWLOCKMODE;
286 
287 
300  typedef enum {
301  P6SF_NOFLAGS = 0x00000000,
302  P6SF_CREATE = 0x00000001,
303  P6SF_EXCLUSIVE = 0x00000002
304  } P6SEMFLAG;
305 
312  #undef INTERFACE
313  #define INTERFACE p6INamedSemaphore
315  {
321  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
322 
340  P6DECLCOMMETHOD(open)(P6THIS_ const P6WCHAR *pwszName,P6SEMFLAG flags,P6INT32 initialValue,P6FILEMODE nMode) P6PURE;
341 
347 
355 
363  P6DECLCOMMETHOD(waitTimed)(P6THIS_ P6INTERVAL tTimeout) P6PURE;
364 
373  P6DECLCOMMETHOD(close)(P6THIS) P6PURE;
374 
381  P6DECLCOMMETHOD(remove)(P6THIS_ const P6WCHAR *pwszName) P6PURE;
382  };
383 
384  // {C136A189-E7F4-4522-B96C-E84D40F88DC4}
385  #define IF_p6INamedSemaphore {0xC136A189,0xE7F4,0x4522,{0xB9,0x6C,0xE8,0x4D,0x40,0xF8,0x8D,0xC4}}
386 
387  // {80CCAC2E-E5B1-446C-8018-039E9627BB9A}
388  #define COMP_p6NamedSemaphore {0x80CCAC2E,0xE5B1,0x446C,{0x80,0x18,0x03,0x9E,0x96,0x27,0xBB,0x9A}}
389 
390 #ifdef __cplusplus
391 } // extern "C"
392 } // namespace
393 #endif
394 
395 
396 #ifdef __cplusplus
397 namespace P6R {
398 
405  {
406  public:
407  P6StackRWLock(p6IRWLock *pLock,P6RWLOCKMODE mode) : m_pLock(pLock), m_mode(mode)
408  {
409  if(m_pLock) {
410  m_pLock->addref();
411  if(P6WRITE_LOCK == m_mode) {
412  m_pLock->writeLock();
413  }
414  else {
415  m_pLock->readLock();
416  }
417  }
418  }
420  {
421  if(m_pLock) {
422  m_pLock->unlock();
423  m_pLock->release();
424  m_pLock = NULL;
425  }
426  }
427 
428  protected:
431 
432  private:
437  P6StackRWLock& operator=(const P6StackRWLock &);
438  P6StackRWLock(const P6StackRWLock &);
439  };
440 
442  {
443  public:
444  P6StackMonitor(p6IMonitor *pLock) : m_pLock(pLock)
445  { if(m_pLock) { m_pLock->addref(); m_pLock->lock();} }
447  { if(m_pLock) { m_pLock->unlock(); m_pLock->release(); } }
448 
449  protected:
451 
452  private:
456  P6StackMonitor& operator=(const P6StackMonitor &);
458  };
459 
485  {
486  public:
487  P6StackLock(p6ILock *pLock) : m_pLock(pLock)
488  { if(m_pLock) { m_pLock->addref(); m_pLock->lock();} }
490  { if(m_pLock) { m_pLock->unlock(); m_pLock->release(); } }
491 
492  protected:
494 
495  private:
499  P6StackLock& operator=(const P6StackLock &);
500  P6StackLock(const P6StackLock &);
501  };
502 
503 } // namespace
504 #endif
505 
506 #endif
A intraprocess, reentrant lock/condition variable.
Definition: p6lock.h:79
Used to specify that the P6StackRWLock should perform a write lock operation.
Definition: p6lock.h:284
#define P6PURE
Definition: p6defs.h:192
P6StackMonitor(p6IMonitor *pLock)
Definition: p6lock.h:444
Conditional variable.
Definition: p6lock.h:198
Reader/Writer locking.
Definition: p6lock.h:260
#define P6NOEXPORT
Definition: p6defs.h:120
Non-reentrant, mutual exclusion lock.
Definition: p6lock.h:41
P6RWLOCKMODE m_mode
Definition: p6lock.h:430
Stack based read/writer lock.
Definition: p6lock.h:404
File and directory type definitions.
wchar_t P6WCHAR
Wide character type see p6i18n.h.
Definition: p6types.h:111
The base interface all [p6]COM components must derive from and implement.
Definition: p6comdef.h:97
p6IMonitor * m_pLock
Definition: p6lock.h:450
P6StackLock(p6ILock *pLock)
Definition: p6lock.h:487
P6StackRWLock(p6IRWLock *pLock, P6RWLOCKMODE mode)
Definition: p6lock.h:407
P6SEMFLAG
Defines the available semaphore open flags.
Definition: p6lock.h:300
Used to specify that the P6StackRWLock should perform a read lock operation.
Definition: p6lock.h:283
p6ILock * m_pLock
Definition: p6lock.h:493
p6IRWLock * m_pLock
Definition: p6lock.h:429
P6RWLOCKMODE
Defines the lock mode for a readers/writer stack lock.
Definition: p6lock.h:282
#define P6DECLCOMMETHOD(method)
Definition: p6defs.h:189
P6UINT32 P6FILEMODE
Definition: p6filetypes.h:75
#define P6THIS_
Definition: p6defs.h:193
Stack based non-reentrant lock.
Definition: p6lock.h:484
P6COM definitions and interfaces.
int32_t P6INT32
Definition: p6types.h:76
An implementation of a cross process/thread named counting semaphore.
Definition: p6lock.h:314
#define P6THIS
Definition: p6defs.h:194
#define P6DECLAREIF_(iface, baseif)
Definition: p6defs.h:188