一个线程封装类_类继承class CThread
一个线程封装类_线程优先级_02一个线程封装类_类继承_03一个线程封装类_线程优先级_04{
一个线程封装类_工作线程_05public:
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * Default Constructor
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        CThread()
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04
一个线程封装类_工作线程_05            m_pThreadFunction = CThread::EntryPoint;
一个线程封装类_工作线程_05            m_runthread = FALSE;
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * Default Destructor
一个线程封装类_工作线程_05         * also destroys the thread
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        ~CThread()
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{
一个线程封装类_工作线程_05            if ( m_hThread )
一个线程封装类_工作线程_05                Stop(true);                    //thread still running, so force the thread to stop!
一个线程封装类_子类_09        }
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * Starts the thread.
一个线程封装类_工作线程_05         * @param dwCreationFlags        the flags to use for creating the thread. see CreateThread() in the windows sdk.
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        DWORD Start(DWORD dwCreationFlags = 0)
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{
一个线程封装类_工作线程_05            m_runthread = true;
一个线程封装类_工作线程_05            m_hThread = CreateThread(NULL, 0, m_pThreadFunction, this, 0, &dwCreationFlags);
一个线程封装类_工作线程_05            m_dwExitCode = (DWORD)-1;
一个线程封装类_工作线程_05
一个线程封装类_工作线程_05            return GetLastError();
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * Stops the thread.
一个线程封装类_工作线程_05         *    
一个线程封装类_工作线程_05         * @param bForceKill        if true, the Thread is killed immediately
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        DWORD Stop ( bool bForceKill = false )
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{
一个线程封装类_工作线程_05            if ( m_hThread )
一个线程封装类_类继承_06一个线程封装类_工作线程_07            一个线程封装类_线程优先级_04{
一个线程封装类_工作线程_05                //尝试"温柔地"结束线程
一个线程封装类_工作线程_05                if (m_runthread == TRUE)
一个线程封装类_工作线程_05                    m_runthread = FALSE;        //first, try to stop the thread nice
一个线程封装类_工作线程_05                
一个线程封装类_工作线程_05                GetExitCodeThread(m_hThread, &m_dwExitCode);
一个线程封装类_工作线程_05
一个线程封装类_工作线程_05                if ( m_dwExitCode == STILL_ACTIVE && bForceKill )
一个线程封装类_类继承_06一个线程封装类_工作线程_07                一个线程封装类_线程优先级_04{//强制杀死线程
一个线程封装类_工作线程_05                    TerminateThread(m_hThread, DWORD(-1));
一个线程封装类_工作线程_05                    m_hThread = NULL;
一个线程封装类_子类_09                }
一个线程封装类_子类_09            }
一个线程封装类_工作线程_05
一个线程封装类_工作线程_05            return m_dwExitCode;
一个线程封装类_子类_09        }
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * Stops the thread. first tell the thread to stop itself and wait for the thread to stop itself.
一个线程封装类_工作线程_05         * if timeout occurs and the thread hasn't stopped yet, then the thread is killed.
一个线程封装类_工作线程_05         * @param timeout    milliseconds to wait for the thread to stop itself
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        DWORD Stop ( WORD timeout )
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{
一个线程封装类_工作线程_05            Stop(false);
一个线程封装类_工作线程_05            WaitForSingleObject(m_hThread, timeout);//等待一段时间
一个线程封装类_工作线程_05            return Stop(true);
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * suspends the thread. i.e. the thread is halted but not killed. To start a suspended thread call Resume().
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        DWORD Suspend()
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{//挂起线程
一个线程封装类_工作线程_05            return SuspendThread(m_hThread);
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//** 
一个线程封装类_工作线程_05         * resumes the thread. this method starts a created and suspended thread again.
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        DWORD Resume()
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{//恢复线程
一个线程封装类_工作线程_05            return ResumeThread(m_hThread);
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * sets the priority of the thread.
一个线程封装类_工作线程_05         * @param priority    the priority. see SetThreadPriority() in windows sdk for possible values.
一个线程封装类_工作线程_05         * @return true if successful
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        BOOL SetPriority(int priority)
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{//设置线程优先级
一个线程封装类_工作线程_05            return SetThreadPriority(m_hThread, priority);
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * gets the current priority value of the thread.
一个线程封装类_工作线程_05         * @return the current priority value
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        int GetPriority()
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{//获取线程优先级
一个线程封装类_工作线程_05            return GetThreadPriority(m_hThread);
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05
一个线程封装类_工作线程_05protected:
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * 子类应该重写此方法,这个方法是实际的工作线程函数
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        virtual DWORD ThreadMethod() = 0;
一个线程封装类_工作线程_05        
一个线程封装类_工作线程_05private:
一个线程封装类_工作线程_05
一个线程封装类_类继承_06一个线程封装类_工作线程_07        /**//**
一个线程封装类_工作线程_05         * DONT override this method.
一个线程封装类_工作线程_05         *
一个线程封装类_工作线程_05         * this method is the "function" used when creating the thread. it is static so that way
一个线程封装类_工作线程_05         * a pointer to it is available inside the class. this method calls then the virtual 
一个线程封装类_工作线程_05         * method of the parent class.
一个线程封装类_子类_09         */
一个线程封装类_工作线程_05        static DWORD WINAPI EntryPoint( LPVOID pArg)
一个线程封装类_类继承_06一个线程封装类_工作线程_07        一个线程封装类_线程优先级_04{
一个线程封装类_工作线程_05            CThread *pParent = reinterpret_cast<CThread*>(pArg);
一个线程封装类_工作线程_05            pParent->ThreadMethod();//多态性,调用子类的实际工作函数
一个线程封装类_工作线程_05            return 0;
一个线程封装类_子类_09        }
一个线程封装类_工作线程_05        
一个线程封装类_工作线程_05private:
一个线程封装类_类继承_06一个线程封装类_工作线程_07    HANDLE    m_hThread;                    /**////<Thread Handle    线程句柄
一个线程封装类_工作线程_05    DWORD    m_dwTID;                    ///<Thread ID    线程ID
一个线程封装类_工作线程_05    LPVOID    m_pParent;                    ///<this pointer of the parent CThread object
一个线程封装类_工作线程_05    DWORD    m_dwExitCode;                ///<Exit Code of the thread 线程退出码
一个线程封装类_子类_09
一个线程封装类_工作线程_05protected:
一个线程封装类_类继承_06一个线程封装类_工作线程_07    LPTHREAD_START_ROUTINE    m_pThreadFunction;    /**////<工作线程指针
一个线程封装类_工作线程_05    BOOL    m_runthread;                ///<线程是否继续运行的标志
一个线程封装类_子类_177};

 

    子类只需要从此类继承并重写ThreadMethod()方法就可以了。