📄 dispatch.cpp
字号:
// Dispatch.cpp: implementation of the CDispatch class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include "Dispatch.h"
#include "MSXMLParser.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDispatch::CDispatch()
{
m_handleThread = NULL;
m_dwThreadID = 0;
m_hExitFlag = NULL;
}
CDispatch::~CDispatch()
{
}
// 启动工作线程 [5/12/2008 By willing]
DWORD CDispatch::Run()
{
m_hExitFlag = ::CreateEvent(NULL, TRUE, FALSE, NULL);
if (NULL == m_hExitFlag)
{
return -1;
}
m_handleThread = CreateThread( NULL, 0, DispatchThread,
( LPVOID )this, NULL, &m_dwThreadID );
if (NULL == m_handleThread)
{
return -2;
}
return 0;
}
// 分派线程主函数 [5/12/2008 By willing]
DWORD WINAPI CDispatch::DispatchThread(LPVOID lpParam)
{
if (NULL == lpParam)
{
return -1;
}
CDispatch* ptrDispatch = (CDispatch*)lpParam;
ST_IOITEM IOItem ;
while (1)
{
if(::WaitForSingleObject(ptrDispatch->m_hExitFlag, 500) == WAIT_OBJECT_0)
break;
if (0 != _DataCenter.GetSetLstHead(IOItem))
{
continue;
}
ptrDispatch->DispatchTask(IOItem);
// 释放内存 [5/12/2008 By willing]
if (NULL != IOItem.pData)
{
delete IOItem.pData;
IOItem.pData = NULL;
}
}
return 0;
}
// 停止工作线程 [5/12/2008 By willing]
void CDispatch::Stop()
{
if (NULL != m_hExitFlag)
{
::SetEvent(m_hExitFlag);
}
if (NULL != m_handleThread)
{
DWORD dwReCode = ::WaitForSingleObject(this->m_handleThread, 2000);
if (WAIT_TIMEOUT == dwReCode)
{
// 如果等待超时就强制退出 [5/12/2008 By willing]
::TerminateThread(m_handleThread,0);
}
}
if(this->m_hExitFlag != NULL)
{
::CloseHandle(this->m_hExitFlag);
this->m_hExitFlag = NULL;
}
this->m_handleThread = NULL;
DEGBUGLOG("CDispatch","Stop","退出线程");
return ;
}
void CDispatch::DispatchTask(const ST_IOITEM IOItem)
{
CMSXMLParser MSXMLParser;
int nCode = 0;
CString strMsg = "";
switch(IOItem.stType.wDataType)
{
case MODEL_POLICY:// 策略 [5/12/2008 By willing]
strMsg.Format("文件加密模块收到策略:%s",CString(IOItem.pData));
DEGBUGLOG("CDispatch","DispatchTask",strMsg);
nCode = MSXMLParser.ParseConfig(CString(IOItem.pData),_ConfigInfo);
if ( 0 != nCode)
{
DEGBUGLOG("CDispatch","DispatchTask","解析XML失败");
}
break;
case CLEAR_POLICY:// 清空当前正使用的策略 [5/12/2008 By willing]
DEGBUGLOG("CDispatch","DispatchTask","文件加密模块收到清空策略命令");
_ConfigInfo.ClearConfig();
break;
default:
strMsg.Format("收到无法处理的任务 %d",IOItem.stType.wDataType);
DEGBUGLOG("CDispatch","DispatchTask",strMsg);
break;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -