add optional millis to Wait(), fix waitNotified() time calculation
This commit is contained in:
@@ -93,11 +93,18 @@ bool WaitThread::join() {
|
|||||||
return Thread::join();
|
return Thread::join();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WaitThread::Wait(int seconds) {
|
bool WaitThread::Wait(int seconds, int millis) {
|
||||||
pthread_mutex_lock(&m_mutex);
|
pthread_mutex_lock(&m_mutex);
|
||||||
struct timespec t;
|
struct timespec t;
|
||||||
clockGettime(&t);
|
clockGettime(&t);
|
||||||
t.tv_sec += seconds;
|
t.tv_sec += seconds;
|
||||||
|
long newMillis = t.tv_nsec/1000000 + millis;
|
||||||
|
if (newMillis >= 1000) {
|
||||||
|
t.tv_sec += newMillis / 1000;
|
||||||
|
t.tv_nsec = (newMillis%1000) * 1000000; // rounds down to whole millis
|
||||||
|
} else {
|
||||||
|
t.tv_nsec += millis * 1000000;
|
||||||
|
}
|
||||||
pthread_cond_timedwait(&m_cond, &m_mutex, &t);
|
pthread_cond_timedwait(&m_cond, &m_mutex, &t);
|
||||||
pthread_mutex_unlock(&m_mutex);
|
pthread_mutex_unlock(&m_mutex);
|
||||||
return isRunning();
|
return isRunning();
|
||||||
@@ -120,11 +127,11 @@ bool NotifiableThread::waitNotified(int millis) {
|
|||||||
if (!m_notified) {
|
if (!m_notified) {
|
||||||
struct timespec t;
|
struct timespec t;
|
||||||
clockGettime(&t);
|
clockGettime(&t);
|
||||||
t.tv_sec += millis / 1000000000;
|
t.tv_sec += millis / 1000;
|
||||||
t.tv_nsec += (millis % 1000000000) * 1000000;
|
t.tv_nsec += (millis % 1000) * 1000000;
|
||||||
if (t.tv_nsec > 1000000000) {
|
if (t.tv_nsec >= 1000000000) {
|
||||||
t.tv_sec++;
|
t.tv_sec += t.tv_nsec / 1000000000;
|
||||||
t.tv_nsec -= 1000000000;
|
t.tv_nsec %= 1000000000;
|
||||||
}
|
}
|
||||||
pthread_cond_timedwait(&m_cond, &m_mutex, &t);
|
pthread_cond_timedwait(&m_cond, &m_mutex, &t);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,9 +129,10 @@ class WaitThread : public Thread {
|
|||||||
/**
|
/**
|
||||||
* Wait for the specified amount of time.
|
* Wait for the specified amount of time.
|
||||||
* @param seconds the number of seconds to wait.
|
* @param seconds the number of seconds to wait.
|
||||||
|
* @param millis the optional number of milliseconds to wait.
|
||||||
* @return true if this @a WaitThread is still running and not yet stopped.
|
* @return true if this @a WaitThread is still running and not yet stopped.
|
||||||
*/
|
*/
|
||||||
bool Wait(int seconds);
|
bool Wait(int seconds, int millis = 0);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
Reference in New Issue
Block a user