int nowtime=0;//系统时间 for(i=0;i<n;i++){ if(nowtime<jobs[i].starttime) { nowtime=jobs[i].starttime; } jobs[i].state='R'; jobs[i].endtime=nowtime+jobs[i].needtime; jobs[i].runtime=jobs[i].endtime-jobs[i].starttime; jobs[i].dqzz_time=double(jobs[i].runtime)/jobs[i].needtime; nowtime=jobs[i].endtime; jobs[i].state='F'; }
时间: 2023-11-19 13:04:55 浏览: 139
这段代码是关于作业调度的,通过记录每个作业的开始时间、运行时间、结束时间和响应比等信息来对多个作业进行调度。
具体来说,该代码中的变量`nowtime`表示当前系统时间,初始值为0。然后依次遍历每个作业,如果当前系统时间小于该作业的开始时间,则将当前系统时间更新为该作业的开始时间。
接着,将该作业的状态设置为“正在运行”('R'),计算出该作业的结束时间、运行时间和响应比,并将当前系统时间更新为该作业的结束时间。
最后将该作业的状态设置为“已完成”('F')。
整个过程中,作业的调度是按照响应比从高到低进行的,即先调度响应比高的作业,以提高系统的性能和响应速度。
相关问题
将下面c语言代码改为python代码 #include<stdio.h> #include<stdlib.h> struct PROCESS { char PROCESS_NAME[10]; int atime; int rtime; int ttime; int X; float Response_ratio; }; int main() { struct PROCESS p[3]; for (int i=0;i<3;i++) { scanf("%s %d %d",&p[i].PROCESS_NAME,&p[i].atime,&p[i].rtime); p[i].X=i+1; } struct PROCESS temp; int nowtime=p[0].atime; int sign=0; int flag=0; int m=0; int n=0; for(int i=1;i<3;i++) { if(p[i].atime==nowtime) { if(p[i].rtime<p[sign].rtime) { sign=i; nowtime=p[i].atime; temp=p[i]; p[i]=p[0]; p[0]=temp; } } else if(p[i].atime<nowtime) { sign=i; nowtime=p[i].atime; temp=p[i]; p[i]=p[0]; p[0]=temp; } } while (1) { if(p[m].atime>=n) { p[m].ttime=p[m].rtime; n=p[m].atime+p[m].rtime; } else { p[m].ttime=p[m].rtime+n-p[m].atime; n+=p[m].rtime; } for(int i=1;i<3;i++) { p[i].Response_ratio=(float)(n-p[i].atime)/p[i].rtime; } m++; if(m==3) { break; } if(flag==0) { if(p[1].Response_ratio>=p[2].Response_ratio) { if(p[1].Response_ratio==p[2].Response_ratio) { if(p[1].X>p[2].X) { temp=p[1]; p[1]=p[2]; p[2]=temp; } } } else { temp=p[1]; p[1]=p[2]; p[2]=temp; } flag=1; } } for(int i=0;i<2;i++) { for(int j=1;j<3;j++) { if(p[i].X>p[j].X) { temp=p[i]; p[i]=p[j]; p[j]=temp; } } } for(int i=0;i<3;i++) { printf("%d ",p[i].ttime); } }
以下是将C语言代码转换为Python代码后的结果:
```python
class Process:
def __init__(self):
self.PROCESS_NAME = ""
self.atime = 0
self.rtime = 0
self.ttime = 0
self.X = 0
self.Response_ratio = 0.0
p = [Process() for i in range(3)]
for i in range(3):
p[i].PROCESS_NAME, p[i].atime, p[i].rtime = input().split()
p[i].atime = int(p[i].atime)
p[i].rtime = int(p[i].rtime)
p[i].X = i + 1
temp = Process()
nowtime = p[0].atime
sign = 0
flag = 0
m = 0
n = 0
for i in range(1, 3):
if p[i].atime == nowtime:
if p[i].rtime < p[sign].rtime:
sign = i
nowtime = p[i].atime
temp = p[i]
p[i] = p[0]
p[0] = temp
elif p[i].atime < nowtime:
sign = i
nowtime = p[i].atime
temp = p[i]
p[i] = p[0]
p[0] = temp
while True:
if p[m].atime >= n:
p[m].ttime = p[m].rtime
n = p[m].atime + p[m].rtime
else:
p[m].ttime = p[m].rtime + n - p[m].atime
n += p[m].rtime
for i in range(1, 3):
p[i].Response_ratio = (n - p[i].atime) / p[i].rtime
m += 1
if m == 3:
break
if flag == 0:
if p[1].Response_ratio >= p[2].Response_ratio:
if p[1].Response_ratio == p[2].Response_ratio:
if p[1].X > p[2].X:
temp = p[1]
p[1] = p[2]
p[2] = temp
else:
temp = p[1]
p[1] = p[2]
p[2] = temp
flag = 1
for i in range(2):
for j in range(1, 3):
if p[i].X > p[j].X:
temp = p[i]
p[i] = p[j]
p[j] = temp
for i in range(3):
print(p[i].ttime, end=' ')
```
<script> window.addEventListener('load', function () { var day = document.querySelector('.day') var hours = document.querySelector('.hours') var minutes = document.querySelector('.minutes') var seconds = document.querySelector('.seconds') function countDown(time) { var nowTime = +new Date(); // 返回当前时间总的毫秒数 var inputTime = +new Date(time); // 返回输入时间总的毫秒数 var times = (inputTime - nowTime) / 1000; //剩余时间总的秒数 var d = parseInt(times / 60 / 60 / 24).toString().padStart(2, '0') // 天 var h = parseInt(times / 60 / 60 % 24).toString().padStart(2, '0') //时 var m = parseInt(times / 60 % 60).toString().padStart(2, '0') // 分 var s = parseInt(times % 60).toString().padStart(2, '0')// 当前的秒 day.innerHTML = d + '天' hours.innerHTML = h + '时' minutes.innerHTML = m + '分' seconds.innerHTML = s + '秒' } // countDown('2022-12-12 00:00:00') setInterval(function () { countDown('2022-12-20 00:00:00')}, 1000) }) </script>这个怎么改成settimeout()
可以将setInterval()函数改为setTimeout()函数,并在函数内部重新调用setTimeout()函数实现倒计时的效果,代码如下:
```
<script>
window.addEventListener('load', function () {
var day = document.querySelector('.day')
var hours = document.querySelector('.hours')
var minutes = document.querySelector('.minutes')
var seconds = document.querySelector('.seconds')
function countDown(time) {
var nowTime = +new Date();
var inputTime = +new Date(time);
var times = (inputTime - nowTime) / 1000;
var d = parseInt(times / 60 / 60 / 24).toString().padStart(2, '0')
var h = parseInt(times / 60 / 60 % 24).toString().padStart(2, '0')
var m = parseInt(times / 60 % 60).toString().padStart(2, '0')
var s = parseInt(times % 60).toString().padStart(2, '0')
day.innerHTML = d + '天'
hours.innerHTML = h + '时'
minutes.innerHTML = m + '分'
seconds.innerHTML = s + '秒'
// 继续执行倒计时
setTimeout(function () {
countDown('2022-12-20 00:00:00');
}, 1000);
}
// 初始执行倒计时
setTimeout(function () {
countDown('2022-12-20 00:00:00');
}, 1000);
})
</script>
```
注意,在使用setTimeout()函数时,需要在函数内部再次调用setTimeout()函数,以实现递归调用,达到倒计时的效果。同时,在初始执行倒计时时,也需要使用setTimeout()函数。
阅读全文