////// @file Thread.h/// @brief 线程的封装 , 子类继承并实现自己的功能/// @author guozhiming/// @date 2007-05-16///#ifndef __G_THREAD__#define __G_THREAD__#include "def.h"class G_Thread{    public:        /// @brief 构造函数        G_Thread();        /// @brief 析构函数        ~G_Thread();        /// @brief 获得线程id        ///        /// @return 线程id        pthread_t getThreadId();        /// @brief 启动线程        bool Start();        /// @brief 线程停止        void pause();         /// @brief 线程继续运行        void continues();  //看样子这个是与pause相对应的    private:        /// @brief  屏蔽SIGUSR1信号 , POSIX标准建议在调用sigwait()等待信号以前,进程中所有线程都应屏蔽该信号,以保证仅有sigwait()的调用者获得该信号 , 如果不屏蔽该信号,在sigwait()之前调用pthread_kill()就会出现User defined signal 1.        void maskSIGUSR1();        /// @brief 线程pid        pthread_t g_pid;        /// @brief 信号        sigset_t g_waitSig;        /// @brief 线程运行主函数        ///        /// @param arg        ///        /// @return        static void *threadFun(void *arg);    protected:        virtual void Run() = 0;};#endif

#include "Thread.h"#include "Log.h"G_Thread::G_Thread(){    maskSIGUSR1();//看来这个是通用的。无论怎么用thread,都要加这一句了    // 定义SIGUSR1信号阻塞    sigemptyset(&g_waitSig);    sigaddset(&g_waitSig, SIGUSR1);//上面已经用了mask函数,为什么这里还要来一下???}G_Thread::~G_Thread(){}void G_Thread::maskSIGUSR1(){    sigset_t sig;    sigemptyset(&sig);    sigaddset(&sig , SIGUSR1);    pthread_sigmask(SIG_BLOCK , &sig , NULL);}pthread_t G_Thread::getThreadId(){    return g_pid;}void *G_Thread::threadFun(void *arg){    G_Thread *pThread = (G_Thread*)arg;    pThread->Run();}bool G_Thread::Start(){    int nRet = pthread_create(&g_pid , NULL , threadFun , this);    if(0 == nRet)    {        nRet = pthread_detach(g_pid);        if(nRet == 0)        {            return true;        }    }    else    {        return false;    }    return true;}void G_Thread::pause(){    int sig;    sigwait(&g_waitSig , &sig);//又是信号的知识,未了解}void G_Thread::continues(){    pthread_kill(g_pid , SIGUSR1);//信号与线程的交互啊。}

未完全理解透彻。。待整体把握后,再来看看