📄 mytaskscheduler.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 + -