modify semaphore::wait (win)

This commit is contained in:
mutouyun 2019-06-08 18:08:03 +08:00
parent dc3ef4d4b9
commit a351d2920b

View File

@ -37,19 +37,16 @@ public:
bool wait(std::size_t tm = invalid_value) { bool wait(std::size_t tm = invalid_value) {
DWORD ret, ms = (tm == invalid_value) ? INFINITE : static_cast<DWORD>(tm); DWORD ret, ms = (tm == invalid_value) ? INFINITE : static_cast<DWORD>(tm);
if ((ret = ::WaitForSingleObject(h_, ms)) == WAIT_OBJECT_0) { switch ((ret = ::WaitForSingleObject(h_, ms))) {
case WAIT_OBJECT_0:
return true; return true;
} case WAIT_ABANDONED:
if (ret == WAIT_ABANDONED) { case WAIT_TIMEOUT:
ipc::log("WaitForSingleObject ret: WAIT_ABANDONED\n"); default:
return true;
}
if (ret == WAIT_TIMEOUT) {
return false;
}
ipc::error("fail WaitForSingleObject[%lu]: 0x%08X\n", ::GetLastError(), ret); ipc::error("fail WaitForSingleObject[%lu]: 0x%08X\n", ::GetLastError(), ret);
return false; return false;
} }
}
bool post(long count = 1) { bool post(long count = 1) {
if (::ReleaseSemaphore(h_, count, NULL)) { if (::ReleaseSemaphore(h_, count, NULL)) {