Inhaltsverzeichnis
Endlosschleife
Die Endlosschleife ist ein spezieller Typ der Schleife. Dieser Begriff steht in Cockpit-XP für einen Programmabschnitt, der mit dem Start eines Rennbildschirms permanent durchlaufen wird und zwar so lange, wie der Rennbildschirm aktiv zu sehen ist.
- linenums
... while True do begin ... // Programmzeilen hier end;
Diese Schleife startet mit dem Aufruf des Rennbildschirms nach dem Drücken des Start-Buttons. Im Unterschied zur normalen while-Schleife, prüft die Bedingung True hier, ob der Rennbildschirm noch aktiv ist. Solange diese Bedingung zutrifft, der Rennbildschirm als geöffnet bleibt, führt Cockpit-XP den Code innerhalb dieses Programmteils aus.
Da diese Schleife immer und immer wieder durchlaufen wird und weil das ohne Pause geschieht, ist es für die Programmierung wichtig, Pausen im Programmcode einzubauen. Zum einen führt die hohe permanente Auslastung zu einer starken Beanspruchung der Resourcen des Rennbahnrechners und seines Arbeitsspeichers. Zum anderen können andere Programmteile in ihrer Performance eingeschränkt sein, wenn keine Pausen in der Endlosschleife geplant sind.
Wozu das Ganze?
Mit einer Endlosschleife lässt sich jederzeit auf Ereignisse der Session reagieren, z.B.
Taster überwachen und je nach Zustand Aktionen ausführen |
„Zufällig“ Regnen lassen (mit Regen-AddOn) |
Einen Schaden eintreten lassen, Reifenverschleiß simulieren |
Die Fortschrittsanzeige im GT-Masters AddOn wird abgearbeitet |
Ausstiegsanweisung und Pausen
Ein anderer wichtiger Aspekt ist, eine Ausstiegsanweisung einzubauen, mit der es je nach auftretendem Ereignis im Programmablauf möglich ist, die Endlosschleife sauber zu beenden und zur Cockpit Programoberfläche zurück zu kehren.
Zusätzlich sollte der Programmierer von Zeit zu Zeit die Ausführung der Endlosschleife anhalten, um anderen Programmereignissen Rechenzeit zur Verfügung zu stellen. Es kann sonst passieren, dass Verzögerungen bei anderen Aktionen - auch bei der Rundenzählung und Zeitmessung selbst - auftreten.
- linenums
... while True do begin // Dieser Code wird ausgeführt, wenn eine Session startet oder fortgesetzt wird if cpGetRacingStatus = 'R' then begin ... // Session läuft cpSleep(100); end // Dieser Code wird bei Pause/Chaos ausgeführt else if cpGetRacingStatus = 'P' then begin ... // Session unterbrochen cpSleep(100); end else begin // Session gestopped. Endlosschleife beendet exit; end; end; ...
Wichtig: Der Ausstiegscode sollte sich im Event BeforeClose befinden. So bleibt die Endlosschleife aktiv, bis der Rennbildschirm geschlossen wird. Steigt man vorher aus und möchte eine weitere Session (Training, Quali oder Rennen) starten, steht der Code innerhalb der Endlosschleife nicht mehr zur Verfügung, da das Event StartRealTime nur beim ersten Start des Rennbildschirms ausgeführt wird.