聆听心碎的声音 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 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3