123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #include "stdafx.h"
- #include <process.h>
- #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;
- }
|