1 #include "../../include/pthreadwrapper/thread.h"
\r
3 #include <sys/timeb.h>
\r
12 void Sleep(const long ms)
\r
19 pthread_mutex_init(&m,NULL);
\r
20 pthread_cond_init(&c,NULL);
\r
24 t.tv_sec=tb.time+(ms/1000);
\r
25 t.tv_nsec=((1000000L)*(long)tb.millitm)+((1000000L)*(ms%1000));
\r
27 pthread_mutex_lock(&m);
\r
28 pthread_cond_timedwait(&c,&m,&t);
\r
29 pthread_mutex_unlock(&m);
\r
31 pthread_cond_destroy(&c);
\r
32 pthread_mutex_destroy(&m);
\r
41 m_threadcleaned=true;
\r
44 Thread::Thread(Runnable *runnable)
\r
48 m_runnable=runnable;
\r
50 m_threadcleaned=true;
\r
53 m_runnable->m_thread=this;
\r
62 if(m_threadcleaned==false)
\r
64 pthread_detach(m_thread);
\r
72 void Thread::Cancel()
\r
80 void *Thread::EntryPoint(void *pthis)
\r
84 ((Thread *)pthis)->m_runnable->Run();
\r
85 ((Thread *)pthis)->m_running=false;
\r
86 ((Thread *)pthis)->m_cancelled=false;
\r
88 ((Thread *)pthis)->m_threadnum=0;
\r
96 pthread_join(m_thread,NULL);
\r
97 m_threadcleaned=true;
\r
101 void Thread::Sleep(const long ms)
\r
110 pthread_mutex_init(&m,NULL);
\r
111 pthread_cond_init(&c,NULL);
\r
115 t.tv_sec=tb.time+(ms/1000);
\r
116 t.tv_nsec=((1000000L)*(long)tb.millitm)+((1000000L)*(ms%1000));
\r
118 pthread_mutex_lock(&m);
\r
119 pthread_cond_timedwait(&c,&m,&t);
\r
120 pthread_mutex_unlock(&m);
\r
122 pthread_cond_destroy(&c);
\r
123 pthread_mutex_destroy(&m);
\r
127 void Thread::Start()
\r
130 m_threadcleaned=false;
\r
131 m_threadnum=pthread_create(&m_thread,NULL,Thread::EntryPoint,this);
\r