这个线程类提供几个基本的功能:创建线程、退出线程、获得线程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
加载中,请稍候......