windows.hpp
Go to the documentation of this file.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
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifdef GECODE_THREADS_WINDOWS
00039
00040 namespace Gecode { namespace Support {
00041
00042
00043
00044
00045 forceinline void
00046 Thread::sleep(unsigned int ms) {
00047 Sleep(static_cast<DWORD>(ms));
00048 }
00049
00050 forceinline unsigned int
00051 Thread::npu(void) {
00052 SYSTEM_INFO si;
00053 GetSystemInfo(&si);
00054 return static_cast<unsigned int>(si.dwNumberOfProcessors);
00055 }
00056
00057 forceinline
00058 Thread::~Thread(void) {
00059 if (CloseHandle(w_h) == 0)
00060 throw OperatingSystemError("Thread::~Thread[Windows::CloseHandle]");
00061 }
00062
00063
00064
00065
00066
00067 forceinline
00068 Mutex::Mutex(void) {
00069 InitializeCriticalSection(&w_cs);
00070 }
00071 forceinline void
00072 Mutex::acquire(void) {
00073 EnterCriticalSection(&w_cs);
00074 }
00075 forceinline bool
00076 Mutex::tryacquire(void) {
00077 return TryEnterCriticalSection(&w_cs) != 0;
00078 }
00079 forceinline void
00080 Mutex::release(void) {
00081 LeaveCriticalSection(&w_cs);
00082 }
00083 forceinline
00084 Mutex::~Mutex(void) {
00085 DeleteCriticalSection(&w_cs);
00086 }
00087
00088
00089
00090
00091
00092 forceinline
00093 Event::Event(void)
00094 : w_h(CreateEvent(NULL, FALSE, FALSE, NULL)) {
00095 if (w_h == NULL)
00096 throw OperatingSystemError("Event::Event[Windows::CreateEvent]");
00097 }
00098 forceinline void
00099 Event::signal(void) {
00100 if (SetEvent(w_h) == 0)
00101 throw OperatingSystemError("Event::signal[Windows::SetEvent]");
00102 }
00103 forceinline void
00104 Event::wait(void) {
00105 if (WaitForSingleObject(w_h,INFINITE) != 0)
00106 throw OperatingSystemError("Event::wait[Windows::WaitForSingleObject]");
00107 }
00108 forceinline
00109 Event::~Event(void) {
00110 if (CloseHandle(w_h) == 0)
00111 throw OperatingSystemError("Event::~Event[Windows::CloseHandle]");
00112 }
00113
00114
00115 }}
00116
00117 #endif
00118
00119