00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef INC_MI32_CRITSEC_H
00028 #define INC_MI32_CRITSEC_H
00029
00030 #ifndef GENERATING_DOXYGEN_OUTPUT
00031 #if defined(WIN32)
00032 #ifndef _WINBASE_
00033 extern "C" {
00034 struct _RTL_CRITICAL_SECTION;
00035 }
00036 #endif
00037 #endif
00038 #endif // GENERATING_DOXYGEN_OUTPUT
00039
00040 #include <mi32/stddefns.h>
00041
00042 #ifdef MISYSTEMDLL
00043 #define CLASSLIBEXPORT MI_DLLCLASSEXPORT
00044 #else
00045 #define CLASSLIBEXPORT MI_DLLCLASSIMPORT
00046 #endif
00047
00048
00049 class CLASSLIBEXPORT CRITICALSECTION {
00050 public:
00051
00052 #ifndef GENERATING_DOXYGEN_OUTPUT
00053 class LOCK;
00054 friend class LOCK;
00055 #endif
00056
00057
00058 CRITICALSECTION (
00059 unsigned long SpinCount = 0
00060 );
00061
00062
00063 ~CRITICALSECTION (
00064 );
00065
00066
00067 unsigned long SetSpinCount (
00068 unsigned long SpinCount
00069 );
00070
00071 private:
00072 #ifndef GENERATING_DOXYGEN_OUTPUT
00073 #if defined(WIN32)
00074 _RTL_CRITICAL_SECTION* m_cs;
00075 #else
00076 void* m_cs;
00077 #endif
00078
00079 CRITICALSECTION (const CRITICALSECTION& rhs);
00080 CRITICALSECTION& operator= (const CRITICALSECTION& rhs);
00081
00082 #endif // GENERATING_DOXYGEN_OUTPUT
00083 };
00084
00085
00086
00087
00088 class CLASSLIBEXPORT CRITICALSECTION::LOCK {
00089 public:
00090
00091 LOCK ();
00092
00093
00094 explicit LOCK (
00095 CRITICALSECTION& sc,
00096 bool EnterSection = true
00097 );
00098
00099
00100 ~LOCK ();
00101
00102
00103
00104 bool TryEnter (
00105 CRITICALSECTION& sc
00106 );
00107
00108 private:
00109 #ifndef GENERATING_DOXYGEN_OUTPUT
00110 CRITICALSECTION* m_sc;
00111 #endif // GENERATING_DOXYGEN_OUTPUT
00112 };
00113
00114 #undef CLASSLIBEXPORT
00115 #endif