2 bingfenghuiyipp bingfenghuiyipp 于 2016.05.10 09:48 提问

处理机调度算法实验报告

// Thread.cpp : 实现文件
//

#include "stdafx.h"
#include "HW.h"
#include "Thread.h"

#include "Queue.h"
#include "ThreadManager.h"

CThread::CThread(int time)
:m_thread(NULL),
m_leaveTime(time),
m_totalTime(time),
m_queue(NULL),
m_selected(FALSE)
{

}
IMPLEMENT_DYNAMIC(CThread, CStatic)

CThread::~CThread()
{
}

BEGIN_MESSAGE_MAP(CThread, CStatic)
//{{AFX_MSG_MAP(CThread)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_COMMAND(THREAD_EXIT, OnThreadExit)
ON_COMMAND(THREAD_TIMEOUT, OnThreadTimeOut)
ON_COMMAND(THREAD_RUN, OnRun)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// CThread 消息处理程序

void CThread::OnPaint()
{
CPaintDC dc(this);
CString str;
str.Format("%d",m_leaveTime);
dc.SetBkMode(TRANSPARENT);
dc.TextOut(0,0,str);
}

BOOL CThread::OnEraseBkgnd(CDC* pDC)
{
COLORREF m_color(RGB(0,255,0));
CRect rect;
CBrush foreBrush(m_color);
GetWindowRect(&rect);
ScreenToClient(rect);
pDC->FillRect(rect,&foreBrush);
foreBrush.DeleteObject();
CBrush *borderBrush=NULL;
if(m_selected)
borderBrush=new CBrush(RGB(255,0,0));
else
borderBrush=new CBrush(RGB(0,0,0));
pDC->FrameRect(rect,borderBrush);
borderBrush->DeleteObject();
delete borderBrush;
return TRUE;
}

UINT CThread::ThreadFunction(LPVOID pParam)
{
CThread pThis=(CThread)pParam;
while(pThis->m_leaveTime>0)
{
if(pThis->m_spaceTime<=0)
{
pThis->PostMessage(WM_COMMAND,THREAD_TIMEOUT,0);
pThis->Wait();
}
pThis->Invalidate();
Sleep(1000);
pThis->m_leaveTime--;
pThis->m_spaceTime--;
pThis->Invalidate();
}
pThis->PostMessage(WM_COMMAND,THREAD_EXIT,0);
return 0;
}

void CThread::Kill()
{
TerminateThread(*m_thread,0);
PostMessage(WM_COMMAND,THREAD_EXIT,0);
}

void CThread::Wait()
{
m_thread->SuspendThread();
PostMessage(WM_COMMAND,THREAD_WAIT,0);
}
void CThread::OnRun()
{
if(m_thread==NULL)
{
m_thread=AfxBeginThread(ThreadFunction,this);
}
else
{
m_thread->ResumeThread();
}
}
int CThread::Create(CWnd * pWnd)
{
return CStatic::Create(NULL,WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER
,CRect(0,0,0,0),pWnd);
}

void CThread::SetQueue(Queue *queue)
{
m_queue=queue;
}

void CThread::OnThreadTimeOut()
{
Sleep(10);
m_queue->OnThreadTimeOut();
}

void CThread::OnThreadExit()
{
m_queue->OnThreadExit();
}

void CThread::SetSpaceTime(int time)
{
m_spaceTime=time;
}

void CThread::Selected(BOOL sel)
{
m_selected=sel;
}

不知道代码意思,没法写流程图
谁帮我解释解释呗,谢了!

2个回答

caozhy
caozhy   Ds   Rxr 2016.05.10 09:57

这是mfc框架下多线程并发调用的代码,用传统的流程图很难表示,最好用活动图来表示。

CSDNXIAON
CSDNXIAON   2016.05.10 09:52

数据挖掘实验报告-关联规则算法实验
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
优先级调度算法实验报告(操作系统)
实验目的 本实验模拟在单处理机情况下的处理机调度,帮助学生了解处理机调度的工作。 实验内容 设计一个按优先数调度算法实现处理机调度的程序。
操作系统实验------处理机调度
实验一  处理机调度实验   一、  实验目的: 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。   二、    实验要求:    用C++语言实验对N个进程采用非抢占式的动态优先权优先算法的进程调度   三、    实验内容: (1)   设计一个有N个进程并发的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最
处理机调度——实时调度算法EDF和RMS…
实验二 处理机调度——实时调度算法EDF和RMS      一、实验目的 深入理解处理机调度算法,了解硬实时概念,掌握周期性实时任务调度算法EDF(Earliest Deadline First)和RMS(Rate Monotonic Scheduling)的可调度条件,并能在可调度情况下给出具体调度结果 二、实验原理 EDF为可抢先式调度算法,其调度条件为sum(Ci/Ti)£1;
模拟处理器调度 实验报告 内有流程图源代码
实验一 处理器调度 一. 实验内容 选择一个调度算法,实现处理器调度。 二. 实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪状态进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,帮助自己加深了解处理器调度的工作。 三. 实验题目 第—题:设计一个按优先数调度算法实现处理器调度的程序。 运行环境:Microsoft Visual Studio 2005
处理机调度算法的实现
用静态数组和结构体实现: 先用结构体定义进程的进程号,时间,优先级等属性,另外,我还加了一个属性“下标v”。首先将输入的进程按照其优先级的从高到低排序(这里我用的是冒泡排序),运行当前优先级最高的那个进程,由于每一次运行进程需要一个时间片,所以被运行的进程时间自减1,优先级自减1 。每一次运行完一个进程后,都要重新排序。如果运行完之后时间为0,即表示该进程结束,则将其优先级默认为-1,并
操作系统实验之处理机调度题目及代码实现
实验一 处理机调度(3学时) 一、实验目的 (1)加深对处理机调度的作用和工作原理的理解。 (2)进一步认识并发执行的实质。 二、实验类型 设计型。 三、预习内容 预习课本处理机调度有关内容,包括进程占用处理机的策略方法。 四、实验要求与提示 本实验有两个题,学生可选择其中的一题做实验。 第一题:设计一个按优先权调度算法实现处理器调度的程序。 【提示】
操作系统 处理器调度 实验报告
#include<iostream> #include<queue>//调用STL中的优先队列 using namespace std; //定义一个PCB进程类 class PCB { public: char name[10];//进程的名字 int runtime;//该进程的运行时间 int priority;//该进程的优先级 char state;//该进程的状态 PCB* next;//指向下个进程的指针 void print()const//输出进程的信息 { cout<<" "<<name<<" "<<runtime<<" "<<state<<" "<<priority<<endl; } }; ……
处理机调度算法总结
1. 先来先服务调度算法 先来先服务(FCFS)调度算法 思想:每次调度都是从后背作业队列中选择一个获多个最先进入该队列的作业,将它们调入内存,为他们分配资源、创建进程,然后放入就绪队列。 特点:在进程调度中采用FCFS算法时,每次调度是从就绪队列中选择一个最先进入该队列的进程。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。 利弊:适合长作业和CPU繁忙型作业(需要大量的CPU时间
处理机调度算法(时间调度)
南昌航空大学实验报告 课程名称:  操作系统              实验名称:   处理机调度 班级:110462          姓名:黄 绍 宇    学号:  11046208 一 实验目的: 编写程序以下面三种方式之一模拟处理机调度。要求掌握几种处理机调度算法的基本思想和特点,理解并发与并行的区别,学会设计处理调度算法 二 实验内容: 时间片轮转算法: 时间片轮转调
操作系统处理机调度算法模拟实现
操作系统处理机调度算法模拟实现