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

📄 basethread.cpp

📁 一个用3DES加密文件的小测试程序!
💻 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 + -