线程对象
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;
}
#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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- C#线程间不能调用剪切板的解决方法
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析