📄 fms.cpp
字号:
#include "stdafx.h"
#include "FMS.h"
#include "ThreadMgr.h"
#include "Template.h"
#include "IniUtil.h"
//////////////////////////////////////////////////////////////////////////
CFMS* CFMS::s_pFMS = NULL;
//////////////////////////////////////////////////////////////////////////
CFMS::CFMS()
{
PutState(SS_STOPPED);
}
CFMS::~CFMS()
{
PutState(SS_STOPPED);
s_pFMS = NULL;
//2007.2.1,sunwang
CThreadMgr::Release();
}
CFMS* CFMS::Instance()
{
if(s_pFMS==NULL)
{
s_pFMS = new CFMS();
}
return s_pFMS;
}
void CFMS::Release()
{
if(s_pFMS!=NULL)
{
delete s_pFMS;
}
s_pFMS=NULL;
}
//任务完成后,通过轮询来自动复位
SPIDER_STATE CFMS::GetState()
{
if(m_ssState!=SS_STOPPED)
{
if(CThreadMgr::Instance()->GetOverFlag())
{
HandleAction(SA_STOP);
}
}
return m_ssState;
}
//将无效的输入过滤,形成真正的状态转移图,以后的处理函数里面就不用考虑异常情况了
void CFMS::HandleAction(SPIDER_ACTION saAction)
{
switch(saAction)
{
case SA_START:
if(m_ssState==SS_STOPPED)
{
DoStart();
}
else if (m_ssState==SS_SUSPENDED)
{
DoResume();
}
break;
case SA_STOP:
if(m_ssState==SS_WORKING || m_ssState==SS_SUSPENDED)
{
DoStop();
}
break;
case SA_RESUME:
if(m_ssState==SS_SUSPENDED)
{
DoResume();
}
break;
case SA_SUSPEND:
if(m_ssState==SS_WORKING)
{
DoSuspend();
}
break;
default:
break;
}
return;
}
void CFMS::PutState(SPIDER_STATE ssState)
{
m_ssState = ssState;
}
//
//真正的状态转移函数
//
void CFMS::DoStart()
{
//2007.2.12,template
TCHAR lpszPath[MAX_PATH]={0};
GetModuleFileName(g_hInstance,lpszPath,MAX_PATH);
PathRemoveFileSpec(lpszPath);
PathAppend(lpszPath,DEFAULT_TEMPLATE_FILE_EX);
if(!NIniUtil::FileExist(lpszPath))
{
DebugString("[CFMS::DoStart]","no template file");
return;
}
CTemplate* objTemplate = CTemplate::Instance();
objTemplate->SetPath(lpszPath);
objTemplate->Parse();
CThreadMgr::Instance()->SpawnV(CTemplate::Instance()->GetThread());
PutState(SS_SUSPENDED); //first spawn then resume
DoResume();
return;
}
void CFMS::DoStop()
{
DoResume(); //first resume then stop
CThreadMgr::Instance()->StopAll();
PutState(SS_STOPPED);
return;
}
void CFMS::DoSuspend()
{
CThreadMgr::Instance()->SupsendAll();
PutState(SS_SUSPENDED);
return;
}
void CFMS::DoResume()
{
CThreadMgr::Instance()->ResumeAll();
PutState(SS_WORKING);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -