我正在写一个面向对象版本的FCFS调度算法,我遇到了一个问题。我需要知道是否有任何方法可以访问成员函数定义中的对象数组,而不是显式地将其作为参数传递。
我试过使用"this-pointer",但是由于当前进程的结束时间的计算需要前一个进程的结束时间,所以"this“不起作用。或者至少我认为它不会。我不知道如何使用"this“来访问”以前的“对象。
void Process :: scheduleProcess(int pid) {
if(pid == 0) finishTime = burstTime;
else finishTime = burstTime +
this->[pid-1].finishTime;
turnAroundTime = finishTime - arrivalTime;
waitingTime = turnAroundTime - burstTime;
}显然,我可以将对象数组作为参数发送并直接使用它。我只想知道有没有更好的方法:
这是调用上述函数的部分:
for(int clockTime = 0; clockTime <= maxArrivalTime(process);
clockTime++) {
// If clockTime occurs in arrivalTime, return pid of that
process
int pid = arrivalTimeOf(clockTime, process);
if(pid >= 0) {
process[pid].scheduleProcess(pid);
} else continue;
}由于我使用processpid调用scheduleProcess(),这是一个对象的向量,所以我应该能够操作与processpid对象相关的变量。如何在函数本身中访问processpid-1?(不将进程向量作为参数传递)
发布于 2019-08-14 20:48:56
因为scheduleProcess是Process的成员,所以它只知道Process对象知道的内容。之前的过程在这一层是未知的。有一些方法可以使用未定义的行为,并对您的代码做出更多假设来绕过这一点,但这些方法应该避免。
避免这一切的一种可移植的解决方案是简单地将前一个进程的完成时间作为参数传递进来,因为您在调用scheduleProcess时就知道这个值。如果没有先前的进程(数组中的第一个条目),则此完成时间将为0。
https://stackoverflow.com/questions/57494942
复制相似问题