//thread.h
#ifndef __THREAD_H__
#define __THREAD_H__
class Thread
{
public:
Thread();
virtual ~Thread();
protected:
pthread_t m_nThreadID;
int m_bTerminated;
int m_bFreeOnTerminate;
int m_bIsActive;
static void* ThreadProc( void* lpParameter );
public:
virtual int Start( int nPriority = -1, int nPolicy = -1 );
virtual int Stop();
virtual void Execute() = 0;
};
#endif //__THREAD_H__
//thread.cpp
Thread::Thread()
{
m_bTerminated = 0;
m_bFreeOnTerminate = 0;
m_bIsActive = -1;
}
Thread::~Thread()
{
}
void* Thread::ThreadProc( void* lpParameter )
{
Thread* pThread = (Thread*)lpParameter;
if( !pThread->m_bTerminated )
{
pThread->Execute();
}
delete pThread;
pthread_exit( NULL );
return 1;
}
int hread::Start( int AnPriority, int AnPolicy )
{
m_bTerminated = 0;
int Result;
pthread_attr_t attr;
sched_param param;
pthread_attr_init( &attr );
if( -1 != AnPolicy)
{
pthread_attr_setschedpolicy( &attr, AnPolicy );
}
pthread_attr_getschedparam( &attr, ¶m );
if( -1 != AnPriority )
{
param.sched_priority = AnPriority;
}
pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_DETACHED);
pthread_attr_setschedparam( &attr, ¶m );
Result = pthread_create(&m_nThreadID, &attr, &ThreadProc, this );
pthread_attr_destroy(&attr);
if(Result != 0)
{
return -1;
}
usleep(1000);
if( Result > 0 )
return -1;
else
return 0;
}
int Thread::Stop()
{
m_bTerminated = -1;
m_bIsActive = -1;
return 0;
}
#ifndef _PEERTHREAD_
#define _PEERTHREAD_
class PeerThread:public Thread
{
public:
PeerThread();
~PeerThread();
virtual void Execute()
{
while(!m_bTerminated)
{
//do ...........
}
}
};
#endif
//main.cpp
int main()
{
PeerThread peer;
peer.start();
peer.stop();
}
主要是用静态成员函数不能访问私有变量,这里,可以看看
static void* ThreadProc( void* lpParameter );
virtual int Start( int nPriority = -1, int nPolicy = -1 );
virtual void Execute() = 0;
这三个函数的实现有明白了,
http://www.linuxselfhelp.com/HOWTO/C++Programming-HOWTO-18.html