📄 xthread.cpp
字号:
#include "stdafx.h"
#include "xthread.h"
#include <stdlib.h>
xThread::xThread(void) : m_dwThreadID(0), m_hThread(INVALID_HANDLE_VALUE),
m_bTerminated(FALSE), m_bIsSuspended(FALSE), m_lpParam( NULL )
{
}
xThread::~xThread(void)
{
if (m_hThread != INVALID_HANDLE_VALUE)
{
if (m_bIsSuspended)
Resume();
Terminate();
WaitFor();
}
}
void xThread::WaitFor(void)
{
//to do: handle SendMessage deadlock
if (m_hThread != INVALID_HANDLE_VALUE)
{
WaitForSingleObject(m_hThread, INFINITE);
}
}
BOOL xThread::Start(LPVOID lpParam, BOOL bSuspended)
{
if( m_hThread != INVALID_HANDLE_VALUE )
return FALSE;
unsigned int dwThreadID;
int nFlag = 0;
m_lpParam = lpParam;
if (bSuspended)
{
nFlag = CREATE_SUSPENDED;
m_bIsSuspended = TRUE;
}
else
m_bIsSuspended = FALSE;
HANDLE hThread = (HANDLE)CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadProc,
(void*)this,
nFlag,
(LPDWORD)&dwThreadID);
if (hThread == INVALID_HANDLE_VALUE)
return FALSE;
m_dwThreadID = dwThreadID;
m_hThread = hThread;
// m_bTerminated = FALSE;
return TRUE;
}
BOOL xThread::IsSuspended()
{
return m_bIsSuspended;
}
BOOL xThread::Resume(void)
{
if (ResumeThread(m_hThread) != (DWORD)-1)
{
m_bIsSuspended = FALSE;
return TRUE;
}
else
return FALSE;
}
BOOL xThread::Suspend(void)
{
if (SuspendThread(m_hThread) != (DWORD)-1)
{
m_bIsSuspended = TRUE;
return TRUE;
}
else
return FALSE;
}
BOOL xThread::IsTerminated(void)
{
return m_bTerminated;
}
BOOL xThread::IsStarted(void)
{
return m_hThread != INVALID_HANDLE_VALUE;
}
void xThread::Terminate(void)
{
// ODS("FSDAF");
::InterlockedExchange((LONG *)&m_bTerminated,TRUE);
}
unsigned WINAPI xThread::ThreadProc(LPVOID pParam)
{
xThread* pThread = (xThread*)pParam;
::InterlockedExchange((LONG *)&(pThread->m_bTerminated),FALSE);
// 初始化随机数种子
srand( GetCurrentThreadId() | timeGetTime() );
try
{
pThread->Execute(pThread->m_lpParam);
}
catch(...)
{
throw;
}
pThread->OnTerminated();
CloseHandle(pThread->m_hThread);
pThread->m_hThread = INVALID_HANDLE_VALUE;
pThread->m_dwThreadID = 0;
pThread->m_bTerminated = TRUE;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -