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 #include "macros.hpp" 00031 00032 00033 /***************************************************************************** 00034 ** Namespaces 00035 *****************************************************************************/ 00036 00037 namespace ecl { 00038 00039 /***************************************************************************** 00040 ** Typedefs 00041 *****************************************************************************/ 00042 00043 typedef CRITICAL_SECTION RawMutex; 00045 /***************************************************************************** 00046 ** Class Mutex 00047 *****************************************************************************/ 00058 class ecl_threads_PUBLIC Mutex { 00059 public: 00067 Mutex(const bool locked = false); 00073 virtual ~Mutex(); 00074 00080 void unlock(); 00086 void lock(); 00098 bool trylock(Duration &duration); 00107 bool trylock(); 00117 unsigned int locks() { return number_locks; } 00118 00125 RawMutex& rawType() { return mutex; } 00126 00127 private: 00128 RawMutex mutex; 00129 unsigned int number_locks; 00130 00131 }; 00132 00133 }; // namespace ecl 00134 00135 00136 #endif /* ECL_IS_WIN32 */ 00137 #endif /* ECL_THREADS_MUTEX_W32_HPP_ */