提供一种封装线程的思路。
   开发服务器程序,最常用的技术是多线程技术,有很多种线程封装重用的方法,利用C++模板特性封装线程,
能够在开发的时候更多的关注线程的业务,无须关心线程的创建,并且不同的平台,创建线程的方式都很单一。

代码如下:

// 线程业务抽象类,具体业务继承该类,实现接口即可

class CThreadExecuter
{
public:
    CThreadExecuter(void) {}
    virtual ~CThreadExecuter(void) {}

public:

 // 返回值:线程执行错误码
 // iPara -- 业务参数,可为其他对象或标识

 int Execute(int iPara = 0)
    {
        return ExecuteImp(iPara);
    }

    // 可根据需要重载函数声明

    virtual void Stop(void) {}

    // 可用于执行特定工程定义的任务

    virtual void AddCommand(int iCmdID, void* pPara) {}

protected:

    virtual int ExecuteImp(int iPara) = 0;

};

//////////////////////////////////////////////////////////////////////////
const int THREAD_EXECUTE_SLEEP_TIME_DEFAULT = 10;    // thread default sleep time
const int THREAD_STOP_WAIT_TIME_DEFAULT = 2 * 1000;  // thread wait time default value that stop thread

//////////////////////////////////////////////////////////////////////////
// 这是线程的基类,通过将线程控制和执行业务分离分别独立演化,达到线程重用的目的
// 线程基类为模板类,使用时必须先实现具体的事务执行类,可从CThreadExecuter类继承
// 或者实现了Execute(int iSleepTime), Stop接口的任意类
template <class TExecuter>
class CThread
{
public:
    CThread(void);
    virtual ~CThread(void);

public:
    // sleep time is milliseconds
    int Start(int iPara, int iSleepTime = THREAD_EXECUTE_SLEEP_TIME_DEFAULT, bool bSuspended = false);
    // wait time is milliseconds
    int Stop(int iWaitTime = THREAD_STOP_WAIT_TIME_DEFAULT)
    {
        return StopImp(iWaitTime);
    }
    // suspends thread
    int Suspend(void)
    {
        return SuspendImp();
    }
    // decrements thread's suspend count.
    // When the suspend count is decremented to zero, the execution of the thread is resumed
    int Resume(void)
    {
        return ResumeImp();
    }
    bool IsRunning(void)
    {
        return IsRunningImp();
    }
   
    //////////////////////////////////////////////////////////////////////////
    int GetThreadID(void) const
    {
        return m_iThreadID;
    }

    TExecuter* GetExecuter(void)
    {
        return &m_objExecuter;
    }

public:
    // 该接口子类可实现,也可不实现,并且允许重载
    virtual int SetPriority(int iPriority)
    {
        return 0;
    }

protected:
    // derive class must implement method declare
    virtual int StartImp(bool bSuspend) = 0;
    virtual int StopImp(int iWaitTime) = 0;
    virtual int SuspendImp(void) = 0;
    virtual int ResumeImp(void) = 0;
    virtual bool IsRunningImp(void) = 0;

    // 线程执行对象函数,由子类具体实现
    virtual int Execute(void) = 0;

protected:
    int m_iSleepTime;  // thread execute sleep time, is milliseconds
    int m_iThrdPara;   //

    int m_iThreadID;   // thread ID

    // 具体的线程对象句柄根据所使用的OS决定
    // 具体的线程执行函数也要根据OS,线程创建API不同决定

    TExecuter m_objExecuter;       // 线程执行者对象
};

template <class TExecuter>
CThread<TExecuter>::CThread(void) : m_iSleepTime(0), m_iThrdPara(0), m_iThreadID(0)
{
}


template <class TExecuter>
CThread<TExecuter>::~CThread(void)
{
}


template <class TExecuter>
int CThread<TExecuter>::Start(int iPara, int iSleepTime /* = THREAD_EXECUTE_SLEEP_TIME_DEFAULT */, bool bSuspended /* = false */)
{
    m_iSleepTime = iSleepTime;
    m_iThrdPara = iPara;
    return StartImp(bSuspended);
}