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

📄 fms.cpp

📁 概述:数据的纵向收集
💻 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 + -