您的位置:首页 > 编程语言 > C语言/C++

线程对象

2016-07-13 11:59 253 查看
#ifndef CTHREADEX_H
#define CTHREADEX_H

#include <Windows.h>

class CThreadEx
{
public:
CThreadEx();
~CThreadEx();

bool startThread(); //启动线程
bool suspendThread(); //挂起
bool stopThread();//结束

virtual bool Run(); //线程的入口

static unsigned int __stdcall threadFunction(void* pParam);

public:
bool m_status; //线程状态,FALSE表示线程退出状态,TRUE表示未提出状态
private:
HANDLE m_hthread; //线程句柄
HANDLE m_hEventSuspend; //控制挂起句柄
};

#endif
cpp文件
#include "CThreadEx.h"
#include <process.h>

unsigned int __stdcall CThreadEx::threadFunction(void* pParam)
{
CThreadEx* pCThreadEx = static_cast<CThreadEx*>(pParam);
while(pCThreadEx->m_status)
{
WaitForSingleObject(pCThreadEx->m_hEventSuspend, INFINITE);
//do
pCThreadEx->Run();
}

return 0;
}

CThreadEx::CThreadEx():
m_hthread(NULL),
m_hEventSuspend(NULL)
{
/***/
unsigned int nThreadId;
m_hthread = (HANDLE)_beginthreadex(NULL,0,CThreadEx::threadFunction, this, 0, &nThreadId);

m_hEventSuspend = CreateEvent(NULL,true, false, NULL); //处于无信号状态
}

CThreadEx::~CThreadEx()
{
CloseHandle(m_hEventSuspend);
CloseHandle(m_hthread);
}

bool CThreadEx::startThread()
{
if(m_hEventSuspend == NULL)
{
return false;
}

return SetEvent(m_hEventSuspend);
}

bool CThreadEx::suspendThread()
{
if(m_hEventSuspend == NULL)
{
return false;
}

return ResetEvent(m_hEventSuspend);
}

bool CThreadEx::stopThread()
{
bool bRet = startThread();
if(!bRet)
{
return false;
}
m_status = false; //有读写冲突不影响
WaitForSingleObject(m_hthread,INFINITE);
return true;
}

bool CThreadEx::Run()
{
return true;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 线程