线程创建, 使用, 释放代码, 我自己常用方式, 特此记录.
// 头文件声明
volatile bool m_bXXXThreadExit;
HANDLE m_hXXXThread;
HANDLE m_hXXXEvent;
void CreateXXXThread();
static DWORD WINAPI XXXThread(LPVOID lpParameter);
DWORD XXX();
void ReleaseXXXThread();
// cpp文件
// 初始化
m_bXXXThreadExit = true;
m_hXXXThread = 0;
m_hXXXEvent = 0;
// 自动测量相关代码
void CSomeClass::CreateXXXThread()
{
m_bXXXThreadExit = false;
m_hXXXEvent = ::CreateEvent(0, false, false, 0);
DWORD dwThreadID;
m_hXXXThread = ::CreateThread(NULL, 0, CSomeClass::XXXThread, this, 0, &dwThreadID);
}
void CSomeClass::ReleaseXXXThread()
{
m_bXXXThreadExit = true;
::SetEvent(m_hXXXEvent);
::WaitForSingleObject(m_hXXXThread, INFINITE);
::CloseHandle(m_hXXXEvent);
::CloseHandle(m_hXXXThread);
m_hXXXEvent = 0;
m_hXXXThread = 0;
}
DWORD WINAPI CSomeClass::MeasureThread(LPVOID lpParameter)
{
return ((CSomeClass*)lpParameter)->XXX();
}
DWORD CSomeClass::XXX()
{
/*
// Do Something
...
while(m_bXXXThreadExit == false)
{
Sleep(5);
::WaitForSingleObject(m_hXXXThread, INFINITE);
...
}
return 0;
}
// 使用(创建和释放)
CreateXXXThread();
ReleaseXXXThread();
当然, 封装一个线程池类会更好用. 后面尝试多使用线程池.