线程封装类(3) win
来源:互联网 发布:零基础学油画知乎 编辑:程序博客网 时间:2024/05/18 01:35
#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);
}
- 线程封装类(3) win
- 线程类封装(3)
- 类封装线程(动态线程)
- 线程封装类(1)
- 线程封装类(2)
- 介绍一个线程封装类(CThread)
- 线程类封装(1)
- 线程类封装(2)
- 线程类封装(4)
- 线程类封装(5)
- 一个线程封装类
- C++封装线程类
- 线程类基本封装
- C#封装的一个串口操作类(可用于Win CE)
- C#封装的一个串口操作类(可用于Win CE)
- C#封装的一个串口操作类(可用于Win CE)
- C#封装的一个串口操作类(可用于Win CE)
- win apache php5.3非线程安全
- shell中的各种括号的意义
- Document对象
- 3900: 交换茸角
- MySQL简介篇—安装,配置与卸载
- servlet中get和post的中文乱码解决
- 线程封装类(3) win
- C# Assembly说明
- Android Github上值得关注的开源项目
- 工厂方法模式(Factory Method Pattern,对象创建型模式)
- 2016年蓝桥杯c/c++B组
- 启用宏的安全警告提示一闪就不见了
- javascript笔记
- bzoj1059[ZJOI2007]矩阵游戏
- 方格填数 蓝桥杯