網站首頁 編程語言 正文
之前寫了一個靜態效果的:C/C++實現操作系統進程調度算法,FCFS, RR, SPN, SRT, HRRN-CSDN博客
這次改成了動態演示,使用了上古神器MFC(微軟基礎類庫)來做界面-_-#
定義一個定時器Timer,然后把之前的代碼都放到這個Timer里,每隔0.1秒鐘執行。進程數改成10個。
部分代碼如下,俺是C和C++混用,比如有時候用#define定義符號常量,沒用const定義常量。
//主要代碼片段
#define ScheduleFunNum 5 //5個調度算法
#define ProcedureNum 10 //10個進程
#define MaxTime 100 //總共最大時長
#define TimeSlice 4 //RR算法時間片
//代碼略
void CCPUScheduleDlg::Init()
{
// TODO: 在此處添加實現代碼.
//kill所有定時器
for (int i = 0; i < ScheduleFunNum; i++)
{
KillTimer(i);
}
//初始化方塊區域,全部置“空”
for (int x = 0; x < MaxTime; x++)
{
for (int y = 0; y < ProcedureNum; y++)
{
square[x][y] = 0;
}
}
//清空進程列表
procedureList.clear();
//置初始時間為0
time = 0;
}
void CCPUScheduleDlg::InitProcedureInfo()
{
//pid, arriveTime, serviceTime, eclapsedTime, remainTime, accmulateTime
//進程id,到達時間,服務時間,已服務時間,剩余時間,已用時間片
CPUProcedure p1(1, 0, 6, 0, 6, 0);
CPUProcedure p2(2, 2, 2, 0, 2, 0);
CPUProcedure p3(3, 4, 4, 0, 4, 0);
CPUProcedure p4(4, 5, 5, 0, 5, 0);
CPUProcedure p5(5, 8, 12, 0, 12, 0);
CPUProcedure p6(6, 12, 2, 0, 2, 0);
CPUProcedure p7(7, 15, 8, 0, 8, 0);
CPUProcedure p8(8, 18, 2, 0, 2, 0);
CPUProcedure p9(9, 22, 5, 0, 5, 0);
CPUProcedure p10(10, 25, 12, 0, 12, 0);
//代碼略
}
void CCPUScheduleDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息處理程序代碼和/或調用默認值
if (nIDEvent == 1) //FCFS
{
//某個進程到達,將此進程扔進List
for (int i = 0; i < ProcedureNum; i++)
{
if (time == procedure[i].arriveTime)
{
procedureList.push_back(procedure[i]);
}
}
//遍歷進程List,根據不同的調度算法,判斷當前輪到哪個進程執行
CPUProcedure p;
if (!procedureList.empty())
{
p = procedureList.front();
procedureList.pop_front();
square[time][p.pid - 1] = 1; //如果當前時間是0,選擇的進程id是1,則將square[0][0]置1
p.eclapsedTime++;
p.remainTime--;
if (p.remainTime != 0) //如果當前進程未執行完畢,將其放回進程List
{
procedureList.push_front(p);
}
}
if (time < MaxTime - 1)
{
time++;
}
else
{
KillTimer(1);
}
OnPaint();
}
else if (nIDEvent == 2) //非搶占SJF
{
//以下代碼略
動態視頻如下,有兩個RR算法,其中一個是俺自己造的,和原始的RR算法有點區別。
進程調度動態演示
原文鏈接:https://blog.csdn.net/crazybobo1207/article/details/133801580
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-03-22 C++實現簡易選課系統代碼分享_C 語言
- 2022-02-15 Linux系統設置tomcat開機自啟介紹_Linux
- 2022-01-19 正則——時間 時分秒 12小時制 24小時制 moment可以轉化的時間 HH:mm:ss hh:m
- 2022-04-17 解決SpringBoot攔截器中無法依賴注入bean
- 2022-09-26 MQTT android配置
- 2022-10-02 Linux?Shell?自動交互功能實現_linux shell
- 2023-10-14 uniapp在Android 10對公共目錄的非媒體文件讀取上傳失敗問題
- 2022-09-17 C++中String類型的逆序方式_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支