📄 thread.cpp
字号:
/************************************************************************
模快名: moxu 公共类库
功能: 创建新线程
完成日期: 2007-10-20
作者: 许 培 Xu Pei(Email/MSN: peimoxu@163.com)
本代码可以自由使用,但因使用本代码造成的后果,本人不承担任何责任
************************************************************************/
#include "stdafx.h"
#include "Thread.h"
namespace moxu
{
bool Thread::Start(const detail::ThreadStart& start)
{
if(m_handle)
CloseHandle(m_handle);
detail::ThreadParam param(start);
m_handle = (HANDLE)_beginthreadex(NULL, 0, ThreadEntry, ¶m, 0, &m_id);
if(m_handle == NULL)
return false;
param.Wait(); //wait "pParam->Started()" in ThreadEntry
return true;
}
bool Thread::Join()
{
if(NULL == m_handle)
return false;
if(m_id == GetCurrentThreadId()) //防止当前线程调用此函数造成死锁
return false;
if(WAIT_OBJECT_0 != WaitForSingleObject(m_handle, INFINITE))
return false;
CloseHandle(m_handle);
m_handle = NULL;
return true;
}
unsigned int WINAPI Thread::ThreadEntry(LPVOID lParam)
{
detail::ThreadParam* pParam = (detail::ThreadParam*)lParam;
detail::ThreadStart start = pParam->GetStart();
pParam->Started();
start();
return 0;
}
}//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -