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

📄 edfscheduledlg.h

📁 进程的调度
💻 H
字号:
// EDFScheduleDlg.h : 头文件
//

#pragma once
#include "TimeStatusBar.h"
#include "ExpandingDialog.h"
#include "BitMapWnd.h"
#include "afxcmn.h"
#include "afxwin.h"

#define CLOCK_TIMER 1

//
#define LEFTOFFSET		25
#define RIGHTOFFSET		50
#define BOTTOMOFFSET	50
#define BLOCKHEIGHT		15
#define	BLOCKWIDTH		45
#define LINEHEIGHT		40
//

typedef struct tagTCB{
	CString TaskName;//任务名称
	double Period;//任务周期
	double CPUTime;//任务所需的CPU时间
	double RemainTime;//剩下需要的CPU时间
	UINT nCount;//任务执行过了的次数

	UINT nCountNT;//任务执行过了的次数,用于计数驱动。
	double RemainTimeNT;//剩下需要的CPU时间,用于计数驱动。
}TCB;

// CEDFScheduleDlg 对话框
class CEDFScheduleDlg : public CExpandingDialog
{
// 构造
public:
	CEDFScheduleDlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
	enum { IDD = IDD_EDFSCHEDULE_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持

protected:
	BOOL m_bWorking;
	CTimeStatusBar m_TSB;
	CPtrArray m_TCBPtrArray;//保存着指向TCB指针的动态数组。
	CString m_TaskName;
	double m_Period;
	double m_CPUTime;
	double m_U;//当前所有任务的CPU利用率。
	int m_Tid;//当前运行的任务的下标。-1表示让CPU空跑
	unsigned long m_TimeCounter;//计时器,计算本次调度已经经过的秒数。

	HICON m_hIcon;
	CProgressCtrl m_TCBProgress;//任务进度条
	CStatic m_TCBTitle;
	
protected:
	//以下为非时间驱动调度及显示调度流程所用到数据成员。
	CBitMapWnd m_BitmapCtrl;//显示绘制结果的控件。
	CBitmap m_ShowFlowBitmap;//显示流程的位图。
	CDC m_dcMem;
	CBitmap* m_pOldBitmap;

	int m_TidNT;//在计数驱动调度里面的当前正在执行的任务。-1表示让CPU空跑
	unsigned long m_TimeCounterNT;//计时器,计算本次调度已经经过的秒数。
// 实现
protected:
	
	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
	virtual void OnOK();
public:
	BOOL Satisfy();//判断是否能把新的任务添加进来
	void SelectTask();//选择下一个运行的任务
	void StartToRun();
	void EnableCtrls();//调度时把一些按钮会化掉
	void ResetTask();//重新设置任务的信息。
public:
	//以下为非时间驱动调度及显示调度流程的函数。
	virtual BOOL OnDialogExpanding(BOOL bExpanded);
	virtual void OnDialogExpanded(BOOL bExpanded);
	BOOL CreateBitmapCtrl();
	void ScheduleNotTimeDrived();
	double GetMaxPeriod();
	void SelectTaskNT();
	void ResetTaskNT();
	void DrawFitBitmap(double MaxCounter);
	void DrawThePeriod();
public:
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnBnClickedRun();
	afx_msg void OnBnClickedAdd();
	afx_msg void OnBnClickedEnd();
	afx_msg void OnTimer(UINT_PTR nIDEvent);
	afx_msg void OnDestroy();
};

⌨️ 快捷键说明

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