WrappedSemaphore.cpp 744 B

123456789101112131415161718192021222324252627282930313233
  1. #include "WrappedSemaphore.h"
  2. #include <sys/time.h>
  3. using namespace bell;
  4. WrappedSemaphore::WrappedSemaphore(int count) {
  5. sem_init(&this->semaphoreHandle, 0, 0); // eek pointer
  6. }
  7. WrappedSemaphore::~WrappedSemaphore() {
  8. sem_destroy(&this->semaphoreHandle);
  9. }
  10. int WrappedSemaphore::wait() {
  11. sem_wait(&this->semaphoreHandle);
  12. return 0;
  13. }
  14. int WrappedSemaphore::twait(long milliseconds) {
  15. // wait on semaphore with timeout
  16. struct timespec ts;
  17. struct timeval tv;
  18. gettimeofday(&tv, 0);
  19. ts.tv_sec = tv.tv_sec + milliseconds / 1000;
  20. ts.tv_nsec = tv.tv_usec * 1000 + (milliseconds % 1000) * 1000000;
  21. return sem_timedwait(&this->semaphoreHandle, &ts);
  22. }
  23. void WrappedSemaphore::give() {
  24. sem_post(&this->semaphoreHandle);
  25. }