#include "stdafx.h" #include #include "Thread.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif unsigned int WINAPI ThreadProc(IN LPVOID lpParam); CThreadBase::CThreadBase() { m_hThread = NULL; m_ThreadStatus = THREADSTATUS_STOP; m_nThreadID = 0; m_dwOutTime = INFINITE; } CThreadBase::~CThreadBase() { } /************************************************************************/ /* 函数:Start 描述:启动线程 参数: 返回:1成功, 0失败 */ /************************************************************************/ int CThreadBase::Start() { if(m_ThreadStatus != THREADSTATUS_STOP) return 1; if(m_hThread == NULL) m_hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadProc, this, 0, &m_nThreadID); if(m_hThread == 0) { #ifdef _DEBUG CString strError = _T(""); strError.Format(_T("创建线程失败:%d\n"), ::GetLastError()); OutputDebugString(strError); #endif //#ifdef _DEBUG return 0; } m_ThreadStatus = THREADSTATUS_WAIT; return 1; } /************************************************************************/ /* 函数:Exit 描述:线程退出 参数: 返回: */ /************************************************************************/ void CThreadBase::Exit() { if(m_hThread) { if(WaitForSingleObject(m_hThread, m_dwOutTime) == WAIT_TIMEOUT) Terminate(); CloseHandle(m_hThread); } m_hThread = NULL; m_ThreadStatus = THREADSTATUS_EXIT; } /************************************************************************/ /* 函数:Terminate 描述:终止 参数: 返回: */ /************************************************************************/ void CThreadBase::Terminate() { ::TerminateThread(m_hThread, 1); } /************************************************************************/ /* 函数:Suspend 描述:挂起 参数: 返回:1成功,0失败 */ /************************************************************************/ void CThreadBase::Suspend() { ::SuspendThread(m_hThread); m_ThreadStatus = THREADSTATUS_STOP; } /************************************************************************/ /* 函数:ResumeThread 描述:唤醒 参数: 返回:1成功,0失败 */ /************************************************************************/ void CThreadBase::Resume() { ::ResumeThread(m_hThread); m_ThreadStatus = THREADSTATUS_RUNNING; } /************************************************************************/ /* 函数:WorkItem 描述:工作项 参数: IN LPVOID lpParam 返回:0 */ /************************************************************************/ unsigned int WINAPI ThreadProc(IN LPVOID lpParam) { CThreadBase* p = (CThreadBase*)lpParam; int nSatus = 0; while(1) { int nSatus = p->Run(); if(nSatus == THREADSTATUS_EXIT) // 程序结束 break; } return 0; }