线程基类

#pragma once
#define THREAD_WORK_START   WM_USER + 5000
#define THTEAD_WORK_STOP    WM_USER + 5001

 

 
class CThreadWork
{
public:
       CThreadWork(void);
       ~CThreadWork(void);

 
       BOOL StartThread();
       void StopThread();
       virtual BOOL MainDo()=0;
       HANDLE GetThreadHandle();
protected:
       static UINT __stdcall __ThreadWrokFunc(LPVOID pParam);
       HANDLE m_hThread;
};
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

 

 
#include "StdAfx.h"
#include "ThreadWork.h"

 
CThreadWork::CThreadWork(void)
{
       this->m_hThread = NULL;
}

 
CThreadWork::~CThreadWork(void)
{
}

 
BOOL CThreadWork::StartThread()
{
       UINT nThreadID = 0;
       int nVal = _beginthreadex(NULL, 0, __ThreadWrokFunc, (void *)this, 0, &nThreadID);

 
       if( nVal <= 0 )
       {
             return FALSE;
       }
       m_hThread = reinterpret_cast<HANDLE>(nVal); // 通过返回值获得线程句柄
       return TRUE;
}

 
BOOL CThreadWork::StopThread()
{    
       if (this->m_hThread)
       {
             if(TRUE == ::TerminateThread(this->m_hThread,1))
             {
                   if(TRUE == CloseHandle (this->m_hThread))
                   {
                         this->m_hThread = NULL;
                         return TRUE
                   }

 
             }
             return FALSE;
       }
       return TRUE;
}

 
UINT __stdcall CThreadWork::__ThreadWrokFunc( LPVOID pParam )
{

 
       CThreadWork * pThreadWork = reinterpret_cast<CThreadWork *> (pParam);//强制转换成CThreadWork类

 

 
       pThreadWork->MainDo();

 
       return TRUE;

 
}

 
HANDLE CThreadWork::GetThreadHandle()
{
       return m_hThread;
}

本文出自 “会飞de树(往github迁移中)” 博客,转载请与作者联系!

你可能感兴趣的:(线程,职场,休闲)