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 namespace Gecode { namespace Support {
00035
00036
00037
00038
00039 forceinline
00040 Mutex::Mutex(void) {
00041 InitializeCriticalSection(&w_cs);
00042 }
00043 forceinline void
00044 Mutex::acquire(void) {
00045 EnterCriticalSection(&w_cs);
00046 }
00047 forceinline bool
00048 Mutex::tryacquire(void) {
00049 return TryEnterCriticalSection(&w_cs) != 0;
00050 }
00051 forceinline void
00052 Mutex::release(void) {
00053 LeaveCriticalSection(&w_cs);
00054 }
00055 forceinline
00056 Mutex::~Mutex(void) {
00057 DeleteCriticalSection(&w_cs);
00058 }
00059
00060
00061
00062
00063
00064 forceinline
00065 Event::Event(void)
00066 : w_h(CreateEvent(NULL, FALSE, FALSE, NULL)) {
00067 if (w_h == NULL)
00068 throw OperatingSystemError("Event::Event[Windows::CreateEvent]");
00069 }
00070 forceinline void
00071 Event::signal(void) {
00072 if (SetEvent(w_h) == 0)
00073 throw OperatingSystemError("Event::signal[Windows::SetEvent]");
00074 }
00075 forceinline void
00076 Event::wait(void) {
00077 if (WaitForSingleObject(w_h,INFINITE) != 0)
00078 throw OperatingSystemError("Event::wait[Windows::WaitForSingleObject]");
00079 }
00080
00081 forceinline
00082 Event::~Event(void) {
00083 if (CloseHandle(w_h) == 0) {
00084 std::cerr << "Operating system error: "
00085 << "Event::~Event[Windows::CloseHandle]";
00086 std::terminate();
00087 }
00088 }
00089
00090
00091
00092
00093
00094 forceinline void
00095 Thread::sleep(unsigned int ms) {
00096 Sleep(static_cast<DWORD>(ms));
00097 }
00098
00099 forceinline unsigned int
00100 Thread::npu(void) {
00101 SYSTEM_INFO si;
00102 GetSystemInfo(&si);
00103 return static_cast<unsigned int>(si.dwNumberOfProcessors);
00104 }
00105
00106 }}
00107
00108