聆听心碎的声音 2016-05-10 01:48 采纳率: 0%
浏览 3513

处理机调度算法实验报告

// 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;
}

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

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-05-10 01:57
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧