这个线程类提供几个基本的功能:创建线程、退出线程、获得线程ID、休眠,你可以在此基础上增加更多函数,比如 
pthread_cancel = 
TerminateThread, 
pthread_join = 
WaitForSingleObject ...
#ifndef _MTHREAD_H_
#define _MTHREAD_H_
#ifdef WIN32
#include <process.h>
#else
#include <pthread.h>
#endif
class MThread
{
public:
 MThread():
   _pid(-1),
    _hthread(NULL)
   {
   }
   ~MThread()
   {
//    Close();
   }
   bool Create(unsigned long (*start_address)(void*),
void* p)
   {
#ifdef WIN32
    //_pid =
::_beginthread((void(*)(void*))start_address,
0, p);
    _hthread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE) start_address, p, 0, (unsigned
long*)&_pid);
    //if (_pid == -1) //returns –1L on an
error
    //    _brun = false;
    return (_pid != -1);
#else
    pthread_t pid;
    pthread_attr_t pattr;
    pthread_attr_init(&pattr);
   
pthread_attr_setdetachstate(&pattr,PTHREAD_CREATE_DETACHED);
    pthread_create(&pid,
&pattr,(void*(*)(void *))start_address, p);
    _pid= pid;
   
pthread_attr_destroy(&pattr);
    return _pid != -1;
#endif
   }
   static void Sleep(unsigned long ms)
   {
#ifdef WIN32
   
::Sleep(ms);
#else
    struct timespec tp;
    tp.tv_sec = (int) ms/1000;
    tp.tv_nsec = ms%1000;
    try
    {
   nanosleep(&tp,
&tp);
   
}catch(...){}
#endif
   }
   static void ExitThread()
   {
#ifdef WIN32
    _endthread();
#else
    pthread_exit(NULL);
#endif
   }
#ifdef WIN32
   static DWORD       
GetCurrentThreadID() { return
::GetCurrentThreadId();
}
#else   
   static  pthread_t  
GetCurrentThreadID() { return
::pthread_self();
}
#endif
   int     _pid;
   void*  _hthread;
};
#endif
 
 
 							
		 
						
		加载中,请稍候......