| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- //
- // Semaphore_WIN32.cpp
- //
- // $Id: //poco/1.4/Foundation/src/Semaphore_WIN32.cpp#1 $
- //
- // Library: Foundation
- // Package: Threading
- // Module: Semaphore
- //
- // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #include "Poco/Semaphore_WIN32.h"
- namespace Poco {
- SemaphoreImpl::SemaphoreImpl(int n, int max)
- {
- poco_assert (n >= 0 && max > 0 && n <= max);
- _sema = CreateSemaphoreW(NULL, n, max, NULL);
- if (!_sema)
- {
- throw SystemException("cannot create semaphore");
- }
- }
- SemaphoreImpl::~SemaphoreImpl()
- {
- CloseHandle(_sema);
- }
- void SemaphoreImpl::waitImpl()
- {
- switch (WaitForSingleObject(_sema, INFINITE))
- {
- case WAIT_OBJECT_0:
- return;
- default:
- throw SystemException("wait for semaphore failed");
- }
- }
- bool SemaphoreImpl::waitImpl(long milliseconds)
- {
- switch (WaitForSingleObject(_sema, milliseconds + 1))
- {
- case WAIT_TIMEOUT:
- return false;
- case WAIT_OBJECT_0:
- return true;
- default:
- throw SystemException("wait for semaphore failed");
- }
- }
- } // namespace Poco
|