30 #ifndef __ZMQ_CONDITON_VARIABLE_HPP_INCLUDED__ 31 #define __ZMQ_CONDITON_VARIABLE_HPP_INCLUDED__ 33 #include "platform.hpp" 40 #ifdef ZMQ_HAVE_WINDOWS 45 #if _WIN32_WINNT < 0x0600 50 class condition_variable_t
63 inline int wait (mutex_t* mutex_,
int timeout_ )
93 InitializeConditionVariable (&cv);
101 inline int wait (mutex_t* mutex_,
int timeout_ )
103 int rc = SleepConditionVariableCS(&cv, mutex_->get_cs (), timeout_);
110 if (rc != ERROR_TIMEOUT)
119 WakeAllConditionVariable(&cv);
124 CONDITION_VARIABLE cv;
147 int rc = pthread_cond_init (&
cond, NULL);
153 int rc = pthread_cond_destroy (&
cond);
161 if (timeout_ != -1) {
162 struct timespec timeout;
163 clock_gettime(CLOCK_REALTIME, &timeout);
165 timeout.tv_sec += timeout_ / 1000;
166 timeout.tv_nsec += (timeout_ % 1000) * 1000000;
168 if (timeout.tv_nsec > 1000000000) {
170 timeout.tv_nsec -= 1000000000;
173 rc = pthread_cond_timedwait (&
cond, mutex_->
get_mutex (), &timeout);
192 int rc = pthread_cond_broadcast (&
cond);
const condition_variable_t & operator=(const condition_variable_t &)
pthread_mutex_t * get_mutex()
int wait(mutex_t *mutex_, int timeout_)