
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//定义一个名为process的结构体,用于表示进程相关信息
//包含进程名、进程ID、进程优先级、进程状态、进程所需CPU时间、进程描述等成员
struct process
{
string pName;
int pID;
int pPriority;
int pState;
int pCPU;
string pDescription;
};
int main()
{
//创建一个包含4个process结构体元素的数组P,并初始化每个元素的各个成员值
//分别表示不同进程的相关信息,如进程名、ID、优先级等
process P[4] = {
{ "chrome.exe", 101, 10, 1, 3, "google chrome" },
{ "360.exe", 102, 7, 1, 1, "360 safe protect" },
{ "QQ.exe", 103, 5, 1, 4, "tencet QQ" },
{ "CPPIDE.exe", 104, 3, 1, 2, "CFree 5.0" }
};
//外层循环用于遍历每个进程(数组中的每个元素),同时初始化一个时间变量time为0
for (int i = 0, time = 0; i < 4; i++)
{
//将当前进程的状态设置为2
P[i].pState = 2;
//内层循环,只要当前进程所需的CPU时间大于0,就持续执行循环体内容
while (P[i].pCPU > 0)
{
//时间变量自增,表示经过了一个时间单位
time++;
//当前进程所需的CPU时间减1,表示消耗了一个单位的CPU时间
P[i].pCPU--;
//按照指定格式输出当前时间、进程名、进程ID、进程优先级、
//进程状态、剩余CPU时间以及进程描述信息
// etw用于设置输出宽度,setfill用于设置填充字符,left表示左对齐输出
cout << setw(2) << setfill(' ') << left << time
<< ":" << left << setw(12) << P[i].pName
<< setw(5) << P[i].pID
<< setw(3) << P[i].pPriority
<< setw(3) << P[i].pState
<< setw(3) << P[i].pCPU
<< setw(3) << P[i].pDescription
<< "\n";
}
//如果当前进程的CPU时间已经消耗完(等于0)
if (P[i].pCPU == 0)
{
//将当前进程的状态设置为3(同样这里具体含义需根据实际定义)
P[i].pState = 3;
//按照指定格式输出当前时间、进程名、进程ID、进程优先级、
//进程状态、剩余CPU时间以及进程描述信息
cout << setw(2) << setfill(' ') << left << time
<< ":" << left << setw(12) << P[i].pName
<< setw(5) << P[i].pID
<< setw(3) << P[i].pPriority
<< setw(3) << P[i].pState
<< setw(3) << P[i].pCPU
<< setw(3) << P[i].pDescription
<< "\n";
}
}
return 0;
}