📄 basethread.cpp
字号:
// BaseThread.cpp: implementation of the CBaseThread class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BaseThread.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBaseThread::CBaseThread()
{
m_zThreadStatus=S_S_Idle;
}
CBaseThread::~CBaseThread()
{
Close();
}
DWORD CBaseThread::DaemonThread()
{ DWORD dwRet;
TRACE("thisis in base\n");
HANDLE hMultipleHandles[4] = {m_hTerminateEvent,
m_hStartEvent,m_hPauseEvent,m_hStopEvent};
for(;;){
dwRet = WaitForMultipleObjects(4,hMultipleHandles,FALSE,INFINITE);
switch(dwRet){
case WAIT_OBJECT_0: //terminante event
ResetEvent(m_hTerminateEvent);
// timeKillEvent(mmTimerID);
//CloseHandle_(m_hTimerEvent);
return CLOSETHREADCODE;
break;
case WAIT_OBJECT_0+1:// start
ResetEvent(m_hStartEvent);
break;
case WAIT_OBJECT_0+2:// stop
ResetEvent(m_hPauseEvent);
break;
case WAIT_OBJECT_0+3:// pause
ResetEvent(m_hStopEvent);
break;
default:
return CLOSETHREADCODE;
}// end switch
} // end for
return 0;
}
void CBaseThread::Close()
{ if(m_zThreadStatus==S_S_Idle)
return;
SetEvent( m_hTerminateEvent);
if (WaitForSingleObject(m_hDaemonThread,100)!=WAIT_OBJECT_0)
TerminateThread(m_hDaemonThread,CLOSETHREADCODE);
PubCloseHandle(m_hTerminateEvent);
PubCloseHandle(m_hStartEvent);
PubCloseHandle(m_hPauseEvent);
PubCloseHandle(m_hStopEvent);
PubCloseHandle(m_hTimeAliasEvent);
m_zThreadStatus=S_S_Idle;
}
int CBaseThread::PrepareThread()
{ DWORD dwThreadId;
m_hTerminateEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hStartEvent= CreateEvent(NULL,TRUE,FALSE,NULL);
m_hPauseEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hStopEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hTimeAliasEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
TRACE("create thread\n");
m_hDaemonThread = CreateThread(NULL,0,InitialDaemonThread,this,0,&dwThreadId);
if(m_hDaemonThread==NULL){
AfxMessageBox("Thread init error");
return BS_FAIL;}
m_zThreadStatus=S_S_Inited;
return BS_OK;
}
void CBaseThread::Start()
{
if(m_zThreadStatus!=S_S_Loaded&&m_zThreadStatus!=S_S_Inited)
return;
m_zThreadStatus=S_S_Running;
SetEvent(m_hStartEvent);
}
void CBaseThread::Stop()
{
if(m_zThreadStatus!=S_S_Loaded&&m_zThreadStatus!=S_S_Running
&&m_zThreadStatus!=S_S_Paused)
return;
m_zThreadStatus=S_S_Inited;
SetEvent(m_hStopEvent);
}
void CBaseThread::Pause()
{
if(m_zThreadStatus!=S_S_Running)
return;
SetEvent(m_hPauseEvent);
m_zThreadStatus=S_S_Paused;
}
Stream_Status CBaseThread::GetThreadStatus()
{
return m_zThreadStatus;
}
DWORD CBaseThread::GetSize()
{
return 0;
}
int CBaseThread::GetThreadType()
{
return m_nThreadType;
}
void CBaseThread::TriggerTimer()
{
SetEvent(m_hTimeAliasEvent);
}
HANDLE CBaseThread::ConnHandle(int nFlag)
{
switch(nFlag){
case 0:
return m_hStartEvent;
break;
case 1:
return m_hPauseEvent;
break;
default:
return m_hStopEvent;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -