summaryrefslogtreecommitdiff
path: root/inc/OSD_Semaphore.hxx
blob: 0bbf4877187dc64115e8270e7911d4a60fd58b37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _OSD_Semaphore_HeaderFile
#define _OSD_Semaphore_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif

#ifndef _TCollection_AsciiString_HeaderFile
#include <TCollection_AsciiString.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _OSD_Error_HeaderFile
#include <OSD_Error.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
class Standard_ConstructionError;
class OSD_OSDError;
class Standard_ProgramError;
class TCollection_AsciiString;


//! IPC Tools -Semaphores <br>
//!          The semaphores are used to facilitate shared resources. <br>
//!          This implementation provides a way to ensure mutual <br>
//!          exclusion using 'Lock' and 'Free' primitives. <br>
//!          The Lock is used to prevent access if it's not yet allowed. <br>
//!          The Free validates the semaphores and if possible, frees process <br>
//!          waiting for a common resource. <br>
class OSD_Semaphore  {
public:

  void* operator new(size_t,void* anAddress) 
  {
    return anAddress;
  }
  void* operator new(size_t size) 
  {
    return Standard::Allocate(size); 
  }
  void  operator delete(void *anAddress) 
  {
    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
  }

  //! Allocate room for semaphore name. <br>
//!          This is to be used with 'Open'. <br>
//!          so the process is a client. <br>
  Standard_EXPORT   OSD_Semaphore();
  //! Instantiates Semaphore object with a name. <br>
//!          The name is the only way provided to work with a common <br>
//!          semaphore for different processes. <br>
//!          Each process working with the same semaphore must use <br>
//!          a common known access : the semaphore's NAME. <br>
//!          Raises ConstructionError when the name contains characters <br>
//!          not in range of ' '...'~'. <br>
//!          This is for a server process. <br>
  Standard_EXPORT   OSD_Semaphore(const TCollection_AsciiString& Name);
  //! Sets semaphore (physically) into memory <br>
  Standard_EXPORT     void Build() ;
  //! Opens (physically) a semaphore <br>
//!          Raises ConstructionError when the name contains characters <br>
//!          not in range of ' '...'~'. <br>
  Standard_EXPORT     void Open(const TCollection_AsciiString& Name) ;
  //! Returns current value of the semaphore's counter. <br>
//!          Raises ProgramError when the semaphore is not open. <br>
  Standard_EXPORT     Standard_Integer GetCounter() ;
  //! Sets the semaphore's counter to a specific value. <br>
//!          Raises ProgramError when the semaphore is not open. <br>
  Standard_EXPORT     void SetCounter(const Standard_Integer Value) ;
  //! Removes the semaphore. <br>
//!          This is used only by server process ! <br>
//!          Raise ProgramError if the semaphore is already deleted. <br>
  Standard_EXPORT     void Delete() ;
  //! Makes current process waiting for access <br>
//!          Raises ProgramError when the semaphore does't exist. <br>
  Standard_EXPORT     void Lock() ;
  //! Frees one access to a semaphore. <br>
//!          Raises ProgramError when the semaphore does't exist. <br>
  Standard_EXPORT     void Free() ;
  //! Resets semaphore counter to zero. <br>
//!          Raises ProgramError when the semaphore does't exist. <br>
  Standard_EXPORT     void Restore() ;
  //! Returns TRUE if an error occurs <br>
  Standard_EXPORT     Standard_Boolean Failed() const;
  //! Resets error counter to zero <br>
  Standard_EXPORT     void Reset() ;
  //! Raises OSD_Error <br>
  Standard_EXPORT     void Perror() ;
  //! Returns error number if 'Failed' is TRUE. <br>
  Standard_EXPORT     Standard_Integer Error() const;





protected:





private:



TCollection_AsciiString myName;
Standard_Integer myKey;
Standard_Integer mySemId;
OSD_Error myError;


};





// other Inline functions and methods (like "C++: function call" methods)


#endif