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

📄 mytaskscheduler.h

📁 SQLBig5BugTool 宽字符操作问题
💻 H
字号:
// MyTaskScheduler.h: interface for the CMyTaskScheduler class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MYTASKSCHEDULER_H__61D6E134_BDAE_4A4C_9081_CB8C91ABCF8F__INCLUDED_)
#define AFX_MYTASKSCHEDULER_H__61D6E134_BDAE_4A4C_9081_CB8C91ABCF8F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "ParameterList.h"

#include "I_MyTaskScheduler.h"
#include <time.h>
#include <set>
#include <algorithm>

class CMyTask:public IMyTask
{
public:
	CMyTask(
		const DWORD			dwTaskID,		
		const DWORD			dwTaskDelayOrTime,
		const bool			bScheduleImmediately,
		const DELAY_MODE	DelayMode
		):
		m_dwTaskID(dwTaskID),		
		m_DelayMode(DelayMode),
		m_dwTaskDelayOrTime(dwTaskDelayOrTime),
		m_bScheduleImmediately(bScheduleImmediately)
	{
		m_dwTaskDepositeTick=GetTickCount();
		

		GetLocalTime(&m_TaskDepositeTime);
	};

	virtual IParameterList* GetIParameterList()
	{
		return &m_ParameterList;
	};

	virtual bool		IsScheduleImmediately()const{return m_bScheduleImmediately;};

	virtual DWORD		GetTaskID()const{return m_dwTaskID;};
	virtual void		SetTaskID(const DWORD dwTaskID){m_dwTaskID=dwTaskID;};

	virtual DWORD		GetTaskDepositeTick()const{return m_dwTaskDepositeTick;};
	virtual SYSTEMTIME	GetTaskDepositeTime()const{return m_TaskDepositeTime;};

	virtual DELAY_MODE	GetDelayMode()const{return m_DelayMode;};

	virtual BOOL		IsUserTask()const {return m_dwTaskID>=TASKID_USER_BASE;};

	virtual const char*	GetDelayModeName()const
	{
		char* pszDelayMode="Delay Mode Unknown";
		switch(m_DelayMode)
		{
		case DELAYRUN_IMMEDIATELY:
			pszDelayMode="DELAYRUN_NONE";
			break;
			
		case DELAYRUN_AT_SPECIFIC_TIME:
			{
				pszDelayMode="DELAYRUN_AT_SPECIFIC_TIME";
			}
			break;
			
		case DELAYRUN_MS_RELATIVE_TO_DIPOSITED_TIME:
			pszDelayMode="DELAYRUN_MS_RELATIVE_TO_DIPOSITED_TIME";
			break;
			
		case DELAYRUN_MS_RELATIVE_TO_FORMER_TASK:
			pszDelayMode="DELAYRUN_MS_RELATIVE_TO_FORMER_TASK";
			break;
		default:
			assert(false);
			break;
		}

		return pszDelayMode;
	};

	virtual void		SetDelayMode(const DELAY_MODE DelayMode){m_DelayMode=DelayMode;};

	virtual DWORD		GetTaskDelayOrTime()const{return m_dwTaskDelayOrTime;};
	virtual void		SetTaskDelayOrTime(const DWORD dwTaskDelayOrTime){m_dwTaskDelayOrTime=dwTaskDelayOrTime;};
	
private:
	DWORD		m_dwTaskID;
	DWORD		m_dwTaskDepositeTick;
	SYSTEMTIME	m_TaskDepositeTime;

	DELAY_MODE	m_DelayMode;
	DWORD		m_dwTaskDelayOrTime;
	bool		m_bScheduleImmediately;
	
	CParameterList m_ParameterList;
};

typedef std::vector<IMyTask*> MYTASK_LIST;

#include <afxmt.h>

class CMyTaskScheduler  :public IMyTaskScheduler
{
public:
	virtual void ClearTasks();

	virtual void TaskSchedulerPause(const ULONG ulMS);

	virtual void ProcessTask();

	CMyTaskScheduler(
		ITaskSchedulerEventSink* ITaskSchedulerEventSink,
		const char*				 pszSchedulerID
		);

	virtual ~CMyTaskScheduler();

	virtual void Release();

	virtual const char* GetTaskName(const DWORD dwTaskID);
	
	virtual IMyTask* CreateNewTask(
		const DWORD		dwTaskID,		
		const DWORD		dwTaskDelayOrTime,
		const bool		bScheduleImmediately,//true:no parameter needed false:nedd more parameter so just schedule later
		const DELAY_MODE	DelayMode
		);

	virtual void ScheduleTask(IMyTask* pMyTask);
	
	virtual DWORD GetTaskCount()
	{
		CSingleLock(&m_csLock,TRUE);
		
		return m_MyTaskList.size();
	};
	
	virtual IMyTask* ScheduleTaskEx(
		const DWORD			dwTaskID,	
		const DWORD			dwTaskDelayOrTime,
		CParameterStruct*	pParameterStruct,
		const DELAY_MODE	DelayMode=DELAYRUN_MS_RELATIVE_TO_FORMER_TASK
		);

private: 
	IMyTask* CreateNewTaskInternal(
		const DWORD			dwTaskID,		
		const DWORD			dwTaskDelayOrTime,
		const bool			bScheduleImmediately,
		const bool			bUserTask,
		const DELAY_MODE	DelayMode
		);

	BOOL DoTaskInternal(IMyTask* pTaskInfo);

	void ClearAllTask();


	MYTASK_LIST m_MyTaskList;

	MYTASK_LIST m_MyTaskListNotScheduled;

	ITaskSchedulerEventSink* m_pITaskSchedulerEventSink;
	
	std::string m_strSchedulerID;

	DWORD m_dwLastDoTaskTick;

	CCriticalSection m_csLock;
};

#endif // !defined(AFX_MYTASKSCHEDULER_H__61D6E134_BDAE_4A4C_9081_CB8C91ABCF8F__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -