Prozesshandler
-
Hallo,
ich habe ein Probelm, und zwar geht es darum, eine Simulation zu gestalten. Ich habe eine Zeit die jeder Prozess benötigt, diese Zeit wird auf die globale Zeit aufaddiert. jetz brauche ich nur eine Liste, die mir die ganzen Prozesse (methoden einzelner klassen) nach Startzeit und evtl einer Prioritätsvariable sortiert. Wie könnte ich so einen prozesshandler realisieren?
-
hat niemand nen vorschlag`?
-
Hm, finde Deine Frage etwas ungenau (habe das jetzt mal so verstanden, dass ein Prozess bei Dir kein Systemprozess sondern ein (komplexerer) Arbeitsschritt ist. Naja, wenn dem so ist, kann Du die ermittelten Zeiten speichern (zum Beispiel in Millisekunden) und diese dann mittels Quicksort sortieren lassen. Das ist ziemlich schnell. Dafür gibts die bereits fertige Funktion std::qsort aus dem Header <algorithm>.
Hoffe, dass es das ist, was Du suchst
.
-
ich versuche es nochmal genauer zu beschreiben...
die simulation ist nicht in echtzeit. prozesse sind z.b. auto waschen, scheibe putzen etc...
start ist bei globaltime = 0t.es erfolgt ein zufälliges ereignis mit einer gewissen abarbeitungsdauer, diese wird auf globaltime aufaddiert. es reiht sich ein weiterer prozess ein, dieser hat eine vorgeschriebene zeit wann er gestartet wird... also kann es sein, dass sich immer mehr prozesse ansammeln... diese muss ich aber nach ihrer startzeit sortieren, alles klar?
also muss ich diese ganzen prozesse handeln, und ich weiss ni genau wie!
-
Bin mir immer noch nicht so sicher, was du willst. Kann es sein, dass es dir um ganz einfach Dinge, wie die Sortierung oder sowas geht?
Klingt irgendwie so, als ob ein std::priority_queue<Prozess> mit nem eigenen Vergleich brauchst, da mit der mit der "kleinsten" Zeit immer oben ist, dein Problem schon lösen könnte.
-
das mit der priority queue is klar,
ich möchte diese ganze simulation auf basis der ereignisgesteuerten simulation erstellen. beispiel flughafen: ein flugzeug kommt, wird überprüft ob es in die warteschlange für landewillige flugzeuge aufgenommen werden kann, wenn ja wird es in die priority queue geschrieben. diese queue ist nach resttreibstoff sortiert, nur so nebenbei.
das flugzeug welches in der priority queue an erster stelle steht wird zum landen aufgefordert. dies dauert 5 zeiteinheiten. nach diesen 5 ZE muss das flugzeug noch 5 ZE rollen. nur mal so, um einen ablauf zu beschreiben...das ganze gibt es auch für startende flugzeuge...
nun möchte ich bzw soll ich das so realisieren, dass die ganzen schritte (wären ja methoden der einzelnen klassen) nach und nach abgearbeitet werden:
1.ereignis: flugzeug kommt 13.31uhr
2.ereignis: flugzeug an 1. stelle der queue wird zum landen geschickt (dauert 5 min.) -> neues ereignis: 13.36 rollt das flugzeug zum hangar (dauert 5 min.) -> neues ereignis: 13.41 flugzeug ist im hangar und wird gelöscht (oder was auch immer)so und ich weiss ni wie ich das genau machen muss, da muss es doch irgendwelchen theorien geben oder?
kam das jetzt besser rüber? wenn ni nehm ich mir nen strick
-
mach dir eine "timer queue", wo du events reinsteckst die irgendwann in der zukunft ausgelöst werden sollen.
beim abarbeiten des "beginne landung" events steckst du einen neuen event in diese "timer queue", mit datum+uhrzeit=jetzt+5min.
die "timer queue" ist sortiert, und du nimmst immer das nächstliegende ereignis raus und arbeitest es ab.
denke das sollte hinhauen.p.S.: dass du pro resource nochmal eine warteschleife brauchst ist denke ich klar, also wenn z.b. der herr xyz gerade dein auto wäscht kann er nicht gleichzeitig einkaufen gehen. wenn du tasks hast die mehrere resourcen benötigen wird das ganze hässlich, da führt aber wohl kein weg drum herum.