struct ProcessInfo
{ pozostalyCzasPracy,
sumaCzasowOczekiwania
}
typedef ProcessInfo[] ProcessInfos
struct ProcessorState
{ currentJob : ProcessInfo,
jobsToDo : ProcessInfos,
jobsDone : ProcessInfos,
}
function zlepOpisProcesu(processinfo)
{ if(processinfo == null)
return "[ ]";
else
return "[" + processinfo.pozostalyCzasPracy +"," + processinfo.sumaCzasowOczekiwania + "]";
}
function zlepOpisProcesow(processinfos)
{ if(processinfos.size() == 0)
return "<>";
temp = "";
foreach(processinfo in processinfos)
temp += zlepOpisProcesu(processinfo);
return "<" + temp + ">";
}
function zlepOpisProcesora(processorstate)
{ temp = "W/Q/Z="
temp+= zlepOpisProcesu(processorstate.currentJob) + "/";
temp+= zlepOpisProcesow(processorstate.jobsToDo) + "/";
temp+= zlepOpisProcesow(processorstate.jobsDone);
return temp;
}
function makelogline(currenttime, processorstate_przed, zdarzenie, processorstate_po)
{ temp = "t=" + currenttime + " ";
temp+= zlepOpisProcesora(processorstate_przed) + " ";
temp+= zdarzenie + " ";
temp+= zlepOpisProcesora(processorstate_po);
return temp;
}
makelogline produkuje:
t=0 W/Q/Z=[ ]/<[5,0][7,0][3,0][1,0][4,0]>/<> START W/Q/Z=[1,0]/<[5,0][7,0][3,0][4,0]>/<>
do uzytku wszedzie, gdzie zmienia sie stan procesora, czyli:
- dodano job'a (zdarzenie-In)
- zmieniono/rozpoczeto wykonywanie job'a (zdarzenie-Start)
- job'a sie skonczyl (zdarzenie-Stop)
przed i po- zdarzeniu nalezy zachowac stan procka na potrzeby logowania --- albo, przed zdarzeniem utworzyc polowe linijki loga, po zdarzeniu utworzyc reszte..
jesli masz inne struktury, dopasuj sobie analogicznie..
nie wiem co Ci wiecej powiedziec.. nie widze miejsca w ktorym mozesz miec jakikolwiek problem..