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.



Start - FAQ - Glossar - Sitemap - Impressum

 
cockpit-xp/addon/schleifen/endlosschleife.txt · Zuletzt geändert: 2020/11/28 12:16 (Externe Bearbeitung)