pthread_cond_signal(&m_cond);
}
-bool CCondition::Wait(CMutex *mutex, int64_t iTimeout)
+bool CCondition::Wait(CMutex *mutex, uint32_t iTimeout)
{
bool bReturn(false);
sched_yield();
{
struct timespec abstime;
struct timeval now;
- if (gettimeofday(&now, NULL) == 0)
- {
- iTimeout += now.tv_usec / 1000;
- abstime.tv_sec = now.tv_sec + (time_t)(iTimeout / 1000);
- abstime.tv_nsec = (long)((iTimeout % (unsigned long)1000) * (unsigned long)1000000);
- bReturn = (pthread_cond_timedwait(&m_cond, &mutex->m_mutex, &abstime) == 0);
- }
+ gettimeofday(&now, NULL);
+ iTimeout += now.tv_usec / 1000;
+ abstime.tv_sec = now.tv_sec + (time_t)(iTimeout / 1000);
+ abstime.tv_nsec = (int32_t)((iTimeout % (uint32_t)1000) * (uint32_t)1000000);
+ bReturn = (pthread_cond_timedwait(&m_cond, &mutex->m_mutex, &abstime) == 0);
}
return bReturn;
}
-void CCondition::Sleep(int64_t iTimeout)
+void CCondition::Sleep(uint32_t iTimeout)
{
CCondition w;
CMutex m;
CThread::~CThread(void)
{
- m_bStop = true;
- m_threadCondition.Broadcast();
- pthread_join(m_thread, NULL);
+ StopThread();
}
bool CThread::CreateThread(void)
m_bStop = true;
m_threadCondition.Broadcast();
- void *retVal;
- if (bWaitForExit)
- bReturn = (pthread_join(m_thread, &retVal) == 0);
+ if (m_bRunning)
+ {
+ void *retVal;
+ if (bWaitForExit)
+ bReturn = (pthread_join(m_thread, &retVal) == 0);
+
+ m_bRunning = false;
+ }
return bReturn;
}
-bool CThread::Sleep(uint64_t iTimeout)
+bool CThread::Sleep(uint32_t iTimeout)
{
CLockObject lock(&m_threadMutex);
return m_bStop ? false :m_threadCondition.Wait(&m_threadMutex, iTimeout);