public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
* Problems with conditions
@ 2021-03-29 12:19 markus.forrer
  2021-03-30  7:15 ` Ger Hobbelt
  0 siblings, 1 reply; 5+ messages in thread
From: markus.forrer @ 2021-03-29 12:19 UTC (permalink / raw)
  To: pthreads-win32

I have re-implemented the C++ class OSEvent for a Windows simulation that exists for a Linux platform. Thereby I have the problem that the function pthread_cond_wait() does not wait until pthread_cond_signal() is called. Something I have misunderstood.

Many thanks for any hints!


OSEvent::OSEvent()
{
    pthread_condattr_init(&_conditionAttribute);
    pthread_cond_init(&_condition, &_conditionAttribute);
    pthread_mutexattr_init(&_mutexAttribute);
    pthread_mutexattr_settype(&_mutexAttribute, PTHREAD_MUTEX_ERRORCHECK);
    pthread_mutex_init(&_mutex, &_mutexAttribute);
}

OSEvent::~OSEvent()
{
    pthread_cond_destroy(&_condition);
    pthread_condattr_destroy(&_conditionAttribute);
    pthread_mutex_destroy(&_mutex);
    pthread_mutexattr_destroy(&_mutexAttribute);
}

void OSEvent::signal()
{
    pthread_mutex_lock(&_mutex);
    pthread_cond_signal(&_condition);
    pthread_mutex_unlock(&_mutex);
}

OSEventError OSEvent::timedwait(uint32_t timeout)
{
    struct timespec timeoutTime;
    timeoutTime.tv_sec = timeout / 1000;
    timeoutTime.tv_nsec = 1000000 * (timeout % 1000);
    OSEventError success = OSEventError::NoError;
    pthread_mutex_lock(&_mutex);

    // Timeout forever
    if (timeout == 0)
    {
        if (pthread_cond_wait(&_condition, &_mutex) != 0)
        {
            success = OSEventError::Timeout;
        }
    }

    // Timeout time
    else
    {
        if (pthread_cond_timedwait(&_condition, &_mutex, &timeoutTime) != 0)
        {
            success = OSEventError::Timeout;
        }
    }

    pthread_mutex_unlock(&_mutex);
    return success;
}


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-03-31  4:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-29 12:19 Problems with conditions markus.forrer
2021-03-30  7:15 ` Ger Hobbelt
2021-03-30 15:37   ` Aw: " markus.forrer
2021-03-31  1:30     ` ross.johnson
2021-03-31  4:43       ` Markus Forrer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).