时间优先程序通常用于任务调度和作业调度,其中任务按照到达时间或处理时间进行排序,优先处理最早到达或最早需要完成的任务。以下是一个基于最短剩余时间优先(SRTF)算法的简单示例代码:
```c
include include define N 3 // 进程个数 typedef struct JobStruct { int reachTime; // 到达时间 int remainTime; // 剩余时间 int needTime; // 需要运行的总时间 int No;// 进程号 int flag; // 标志位,1标示已做完该作业,0标示未做完 } Job; void init() { printf("Process ReachTime NeedTime\n"); for (int i = 0; i < N; i++) { scanf("%d %d %d", &Job[i].No, &Job[i].reachTime, &Job[i].needTime); Job[i].remainTime = Job[i].needTime; } } int search_Shortest_Remain_Job() { int min = 9999; int index = -1; for (int i = 0; i < N; i++) { if (Job[i].remainTime < min) { min = Job[i].remainTime; index = i; } } return index; } void update(int index) { if (index != -1) { Job[index].flag = 1; } } void SRTF() { int sumTime = 0; int current_time = 0; while (1) { current_time++; int index = search_Shortest_Remain_Job(); if (index != -1) { sumTime += Job[index].remainTime; update(index); printf("Process %d finished at time %d\n", Job[index].No, current_time); } else { printf("No process to run at time %d\n", current_time); break; } } } int main() { init(); SRTF(); return 0; } ``` 代码说明: 定义了一个`JobStruct`结构体,包含进程号、到达时间、剩余时间、需要运行的总时间和标志位。 `init`函数用于输入进程的到达时间和需要运行的总时间,并初始化剩余时间为总时间。 `search_Shortest_Remain_Job`函数用于查找当前剩余时间最短的进程。 `update`函数用于标记进程为已完成。 `SRTF`函数是核心调度函数,按照最短剩余时间优先的原则进行任务调度,并输出每个进程的完成时间。 `main`函数调用初始化函数和SRTF函数,开始任务调度。 这个示例代码实现了基本的SRTF算法,可以根据需要进行扩展和优化。结构体定义:
初始化函数:
查找最短剩余时间:
更新函数:
SRTF函数:
主函数: