C++ thread 线程封装类

C++ thread 线程封装类

      思路是这样的,写一个Thread抽象类,有函数virtual void Run()=0,类中调用Window API函数CreateThread()创建并启动线程,所有线程都执行同一个静态函数ThreadFunction(LPVOID Param),param传递线程对象的this指针

CreateThread(NULL, 0, Thread::WThreadFunctionLinek, (LPVOID)this, 0, &nthreadID);

      在ThreadFunction函数中将Param强转为Thread类型,利用多态特性调用Run()函数,Run的具体实现由子类完成。

DWORD __stdcall Thread::WThreadFunctionLinek(LPVOID Param)
{
      ThreadpThread = ((Thread)Param);
      pThread->Run();
      pThread->Stop();
      return 0;
}

Thread.h

#pragma once
#include <Windows.h>

class Thread;
typedef void (*WThreadFunction)(Thread* pobj);

//线程类;
class Thread
{
private:
	HANDLE hThread;			//线程句柄;
	DWORD nthreadID;		//线程ID;
	static DWORD __stdcall WThreadFunctionLinek(IN LPVOID Param); //静态方法
protected:
	bool bRun;
	virtual void Run() = 0;			//继承并重写;
public:
	Thread();
	void Start();		//运行;
	void Stop();		//停止;
	void WaitExit();	//等待线程退出;
};

Thread.cpp

#include "Thread.h"

Thread::Thread()
{
	bRun = false;
}
void Thread::Start()
{
	if(bRun == true)
		return;
	bRun = true;
	hThread = CreateThread(NULL, 0, Thread::WThreadFunctionLinek, (LPVOID)this, 0, &nthreadID);
	if(hThread == NULL)
	{
		return;
	}
}
void Thread::Stop()
{
	if(bRun == false)
		return;
	bRun = false;
	TerminateThread(hThread,EXIT_FAILURE);
	CloseHandle(hThread);
	hThread = NULL;
}

void Thread::WaitExit()
{
	if(bRun == false)
		return;
	if(hThread == NULL)
		return;
	WaitForSingleObject(hThread, INFINITE);
}

DWORD __stdcall Thread::WThreadFunctionLinek(LPVOID Param)
{
	Thread* pThread = ((Thread*)Param);
	pThread->Run();
	pThread->Stop();
	return 0;
}

使用WThread


//继承WThread;
class Example: public WThread
{
public:
	//重写Run;
	void Run()
	{
		while(this->bRun)
		{
			printf("Hello thread\n");
			Sleep(1000);
		}
	}
};

Wint32 _tmain(Wint32 argc, _TCHAR* argv[])
{
	//实例化;
	Example e;
	//启动线程;
	e.Start();

	getchar();
	return 0;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值