⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xthread.cpp

📁 HTTP 搜索代码
💻 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 + -