1
0
mirror of https://github.com/pocoproject/poco.git synced 2025-04-02 09:49:48 +02:00

fixed GH : Android compile with poco-1.7.5 no 'pthread_condattr_setclock' error

This commit is contained in:
Guenter Obiltschnig 2016-10-07 21:05:57 +02:00
parent 80fea48cdc
commit 29010bc6ad
2 changed files with 30 additions and 4 deletions

@ -24,6 +24,19 @@
#endif #endif
//
// Note: pthread_cond_timedwait() with CLOCK_MONOTONIC is supported
// on Linux and QNX, as well as on Android >= 5.0. On Android < 5.0,
// HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC is defined to indicate
// availability of non-standard pthread_cond_timedwait_monotonic().
//
#ifndef POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT
#if (defined(__linux__) || defined(__QNX__)) && !(defined(__ANDROID__) && defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
#define POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT 1
#endif
#endif
namespace Poco { namespace Poco {
@ -40,7 +53,7 @@ EventImpl::EventImpl(EventTypeImpl type): _auto(type == EVENT_AUTORESET_IMPL), _
if (pthread_mutex_init(&_mutex, NULL)) if (pthread_mutex_init(&_mutex, NULL))
throw SystemException("cannot create event (mutex)"); throw SystemException("cannot create event (mutex)");
#if defined(__linux__) || defined(__QNX__) #if defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
pthread_condattr_t attr; pthread_condattr_t attr;
if (pthread_condattr_init(&attr)) if (pthread_condattr_init(&attr))
{ {
@ -105,7 +118,7 @@ bool EventImpl::waitImpl(long milliseconds)
delta.tv_sec = milliseconds / 1000; delta.tv_sec = milliseconds / 1000;
delta.tv_nsec = (milliseconds % 1000)*1000000; delta.tv_nsec = (milliseconds % 1000)*1000000;
pthread_get_expiration_np(&delta, &abstime); pthread_get_expiration_np(&delta, &abstime);
#elif defined(__linux__) || defined(__QNX__) #elif defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
clock_gettime(CLOCK_MONOTONIC, &abstime); clock_gettime(CLOCK_MONOTONIC, &abstime);
abstime.tv_sec += milliseconds / 1000; abstime.tv_sec += milliseconds / 1000;
abstime.tv_nsec += (milliseconds % 1000)*1000000; abstime.tv_nsec += (milliseconds % 1000)*1000000;

@ -24,6 +24,19 @@
#endif #endif
//
// Note: pthread_cond_timedwait() with CLOCK_MONOTONIC is supported
// on Linux and QNX, as well as on Android >= 5.0. On Android < 5.0,
// HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC is defined to indicate
// availability of non-standard pthread_cond_timedwait_monotonic().
//
#ifndef POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT
#if (defined(__linux__) || defined(__QNX__)) && !(defined(__ANDROID__) && defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
#define POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT 1
#endif
#endif
namespace Poco { namespace Poco {
@ -41,7 +54,7 @@ SemaphoreImpl::SemaphoreImpl(int n, int max): _n(n), _max(max)
if (pthread_mutex_init(&_mutex, NULL)) if (pthread_mutex_init(&_mutex, NULL))
throw SystemException("cannot create semaphore (mutex)"); throw SystemException("cannot create semaphore (mutex)");
#if defined(__linux__) || defined(__QNX__) #if defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
pthread_condattr_t attr; pthread_condattr_t attr;
if (pthread_condattr_init(&attr)) if (pthread_condattr_init(&attr))
{ {
@ -105,7 +118,7 @@ bool SemaphoreImpl::waitImpl(long milliseconds)
delta.tv_sec = milliseconds / 1000; delta.tv_sec = milliseconds / 1000;
delta.tv_nsec = (milliseconds % 1000)*1000000; delta.tv_nsec = (milliseconds % 1000)*1000000;
pthread_get_expiration_np(&delta, &abstime); pthread_get_expiration_np(&delta, &abstime);
#elif defined(__linux__) || defined(__QNX__) #elif defined(POCO_HAVE_MONOTONIC_PTHREAD_COND_TIMEDWAIT)
clock_gettime(CLOCK_MONOTONIC, &abstime); clock_gettime(CLOCK_MONOTONIC, &abstime);
abstime.tv_sec += milliseconds / 1000; abstime.tv_sec += milliseconds / 1000;
abstime.tv_nsec += (milliseconds % 1000)*1000000; abstime.tv_nsec += (milliseconds % 1000)*1000000;