00001
00069 #ifndef INC_MI32_CRITSEC_H
00070 #define INC_MI32_CRITSEC_H
00071
00072 #ifndef INC_MI32_STDDEFNS_H
00073 #include <mi32/stddefns.h>
00074 #endif
00075
00076 #ifdef MISYSTEMDLL
00077 #define CLASSLIBEXPORT MI_DLLCLASSEXPORT
00078 #else
00079 #define CLASSLIBEXPORT MI_DLLCLASSIMPORT
00080 #endif
00081
00082 namespace MITHREAD {
00083
00085 class CLASSLIBEXPORT CRITICALSECTION {
00086 public:
00087
00090 class CLASSLIBEXPORT LOCK {
00091 public:
00093 LOCK ();
00094
00096 explicit LOCK (
00097 CRITICALSECTION& CritSec,
00098 bool EnterSection = true
00099 );
00100
00102 explicit LOCK (
00103 CRITICALSECTION *pCritSec
00104 );
00105
00107 ~LOCK ();
00108
00110 void Enter (
00111 CRITICALSECTION& CritSec
00112 );
00113
00115 void Release (
00116 );
00117
00121 bool TryEnter (
00122 CRITICALSECTION& CritSec
00123 );
00124
00125 private:
00126 #ifndef GENERATING_DOXYGEN_OUTPUT
00127 CRITICALSECTION *m_pCritSec;
00128 bool XXX_Obsolete;
00129 LOCK (const LOCK&);
00130 LOCK& operator= (const LOCK&);
00131 #endif // GENERATING_DOXYGEN_OUTPUT
00132 };
00133
00145 CRITICALSECTION (
00146 unsigned long SpinCount = 0
00147 );
00148
00150 ~CRITICALSECTION (
00151 );
00152
00155 unsigned long SetSpinCount (
00156 unsigned long SpinCount
00157 );
00158
00159 private:
00160 #ifndef GENERATING_DOXYGEN_OUTPUT
00161 class PRIV;
00162 PRIV* m_pPriv;
00163
00164 CRITICALSECTION (const CRITICALSECTION& rhs);
00165 CRITICALSECTION& operator= (const CRITICALSECTION& rhs);
00166
00167 friend class LOCK;
00168 #endif // GENERATING_DOXYGEN_OUTPUT
00169 };
00170
00171 }
00172
00173 #undef CLASSLIBEXPORT
00174
00175 #endif // INC_MI32_CRITSEC_H
00176