?? 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 + -