#define _WORKTHREAD_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include <windows.h>
//回调函数指针
typedef void (*THREAD_ROUTINE)(void *);
class CWorkThread
{
public:
CWorkThread();
virtual ~CWorkThread();
public:
// 创建线程
HRESULT Create(THREAD_ROUTINE pfn, void *pArg);
// 停止线程
void Stop();
// 挂起线程
void Suspend();
// 恢复线程
void Resume();
// 等待线程退出
void Join();
// 获取线程的优先级
int SetPriority(int nPriority);
// 设置优先级
int GetPriority();
// 线程函数
static unsigned long __stdcall ThreadFunction(void* pArg);
//线程启动函数
int StartThread();
protected:
// 线程句柄
HANDLE m_threadHandle;
// 线程ID
unsigned long m_threadId;
// 线程的运行例程
THREAD_ROUTINE m_pfnRoutine;
// 线程例程的参数
void *m_pArg;
};
#endif
#include "stdafx.h"
#include "WorkThread.h"
CWorkThread::CWorkThread()
{
m_threadHandle = NULL;
m_threadId = 0;
m_pfnRoutine = NULL;
m_pArg = NULL;
}
CWorkThread::~CWorkThread()
{
if(m_threadHandle)
{
/// CloseHandle(m_threadHandle);
}
}
/********************************************************************
函数名 : HRESULT Create(THREAD_ROUTINE pfn, void *pArg)
功 能 : 创建线程
参 数 : pfn -- 线程的执行函数
pArg -- 线程函数的参数
返回值 : S_OK--操作成功; 其他--操作失败
********************************************************************/
HRESULT CWorkThread::Create(THREAD_ROUTINE pfn, void *pArg)
{
m_pfnRoutine = pfn;
m_pArg = pArg;
m_threadHandle = ::CreateThread(
NULL, 0, ThreadFunction, this, 0, &m_threadId);
if(m_threadHandle)
{
return S_OK;
}
return S_FALSE;
}
/********************************************************************
函数名 : void Stop(void)
功 能 : 停止线程
参 数 : None
返回值 : None
********************************************************************/
void CWorkThread::Stop(void)
{
::TerminateThread(m_threadHandle, 0);
}
/********************************************************************
函数名 : void Suspend(void)
功 能 : 挂起线程
参 数 : None
返回值 : None
********************************************************************/
void CWorkThread::Suspend(void)
{
::SuspendThread(m_threadHandle);
}
/********************************************************************
函数名 : void Resume(void)
功 能 : 恢复线程
参 数 : None
返回值 : None
********************************************************************/
void CWorkThread::Resume(void)
{
::ResumeThread(m_threadHandle);
}
/********************************************************************
函数名 : void Join(void)
功 能 : 等待线程退出
参 数 : None
返回值 : None
********************************************************************/
void CWorkThread::Join(void)
{
::WaitForSingleObject(m_threadHandle, INFINITE);
}
/********************************************************************
函数名 : int SetPriority(int nPriority)
功 能 : 获取线程的优先级
参 数 : nPriority -- 线程的优先级
返回值 : 线程的优先级
********************************************************************/
int CWorkThread::SetPriority(int nPriority)
{
int nOld = ::GetThreadPriority(m_threadHandle);
::SetThreadPriority(m_threadHandle, nPriority);
return (nOld);
}
/********************************************************************
函数名 : int GetPriority(void)
功 能 : 设置优先级
参 数 : None
返回值 : 线程的优先级
********************************************************************/
int CWorkThread::GetPriority(void)
{
return (::GetThreadPriority(m_threadHandle));
}
/********************************************************************
函数名 : unsigned long ThreadFunction(void* pArg)
功 能 : 线程启动函数
参 数 : pArg -- 线程函数的参数
返回值 : 线程的退出码
********************************************************************/
unsigned long WINAPI//__stdcall
CWorkThread::ThreadFunction(void* pArg)
{
CWorkThread* thread = (CWorkThread*) pArg;
return thread->StartThread();
}
/********************************************************************
函数名 : int StartThread(void)
功 能 : 线程启动函数
参 数 : None
返回值 : 线程的退出码
********************************************************************/
int CWorkThread::StartThread(void)
{
m_pfnRoutine(m_pArg);
return (0);
}