version 0.1.10
[fms.git] / src / pthreadwrapper / thread.cpp
index 466dd5c..d08cf33 100644 (file)
@@ -9,11 +9,32 @@
 namespace PThread\r
 {\r
 \r
+void Sleep(const long ms)\r
+{\r
+       pthread_cond_t c;\r
+       pthread_mutex_t m;\r
+       timespec t;\r
+       timeb tb;\r
+\r
+       pthread_mutex_init(&m,NULL);\r
+       pthread_cond_init(&c,NULL);\r
+\r
+       ftime(&tb);\r
+\r
+       t.tv_sec=tb.time+(ms/1000);\r
+       t.tv_nsec=((1000000L)*(long)tb.millitm)+((1000000L)*(ms%1000));\r
+\r
+       pthread_mutex_lock(&m);\r
+       pthread_cond_timedwait(&c,&m,&t);\r
+       pthread_mutex_unlock(&m);\r
+}\r
+\r
 Thread::Thread()\r
 {\r
        m_running=false;\r
        m_cancelled=false;\r
        m_runnable=0;\r
+       m_threadnum=0;\r
 }\r
 \r
 Thread::Thread(Runnable *runnable)\r
@@ -21,6 +42,7 @@ Thread::Thread(Runnable *runnable)
        m_running=false;\r
        m_cancelled=false;\r
        m_runnable=runnable;\r
+       m_threadnum=0;\r
        if(m_runnable)\r
        {\r
                m_runnable->m_thread=this;\r
@@ -54,6 +76,7 @@ void *Thread::EntryPoint(void *pthis)
                ((Thread *)pthis)->m_running=false;\r
                ((Thread *)pthis)->m_cancelled=false;\r
        }\r
+       ((Thread *)pthis)->m_threadnum=0;\r
        return NULL;\r
 }\r
 \r
@@ -91,7 +114,7 @@ void Thread::Sleep(const long ms)
 void Thread::Start()\r
 {\r
        m_running=true;\r
-       pthread_create(&m_thread,NULL,Thread::EntryPoint,this);\r
+       m_threadnum=pthread_create(&m_thread,NULL,Thread::EntryPoint,this);\r
 }\r
 \r
 }      // namespace\r