00001 00010 /***************************************************************************** 00011 ** Ifdefs 00012 *****************************************************************************/ 00013 00014 #ifndef ECL_THREADS_MUTEX_W32_HPP_ 00015 #define ECL_THREADS_MUTEX_W32_HPP_ 00016 00017 /***************************************************************************** 00018 ** Platform Check 00019 *****************************************************************************/ 00020 00021 #include <ecl/config/ecl.hpp> 00022 #if defined(ECL_IS_WIN32) 00023 00024 /***************************************************************************** 00025 ** Includes 00026 *****************************************************************************/ 00027 00028 #include <windows.h> 00029 #include <ecl/time/duration.hpp> 00030 00031 00032 /***************************************************************************** 00033 ** Namespaces 00034 *****************************************************************************/ 00035 00036 namespace ecl { 00037 00038 /***************************************************************************** 00039 ** Typedefs 00040 *****************************************************************************/ 00041 00042 typedef CRITICAL_SECTION RawMutex; 00044 /***************************************************************************** 00045 ** Class Mutex 00046 *****************************************************************************/ 00057 class Mutex { 00058 public: 00066 Mutex(const bool locked = false); 00072 virtual ~Mutex(); 00073 00079 void unlock(); 00085 void lock(); 00097 bool trylock(Duration &duration); 00106 bool trylock(); 00116 unsigned int locks() { return number_locks; } 00117 00124 RawMutex& rawType() { return mutex; } 00125 00126 private: 00127 RawMutex mutex; 00128 unsigned int number_locks; 00129 00130 }; 00131 00132 }; // namespace ecl 00133 00134 00135 #endif /* ECL_IS_WIN32 */ 00136 #endif /* ECL_THREADS_MUTEX_W32_HPP_ */