gesteuerter Programmablauf
-
ich habe mehrere unterschiedliche Methoden:
loop(int gobackTo, int steps) {} //stellt eine Schleife dar void wait(int sek) { //wartet eine vorgegebene Zeit in Sekunden int startTime = GetTickCount(); while ((int(GetTickCount()-startTime) < (sek*1000)) && (!ende)) { Application->ProcessMessages(); Sleep(1); if (ende) break; } } void machDas() {} //führt eine Aktion aus
In einer ListBox auf der GUI kann der Benutzer vorgegebene Einträge wait, loop und machWas hinzufügen. Die Reihenfolge kann er festlegen. Es sind auch mehrere Einträge möglich. Dann gibt es einen Button, der den Programmablauf startet.
Ich hatte mir das so gedacht, dass ich in dem Startbutton eine for-Schleife integriere, die die Liste durchgeht und je nach String die richtige Methode aufruft. Nur bei der Methode loop funktioniert das nicht, denn hier soll ja das Programm an eine vorgegebene Position in der Liste springen und die Ausführung dort fortsetzen.
Da ja die Methoden unterschiedliche Parameter haben würde ich eine Klasse erstellen und beim erstellen der Liste für jeden Programmschritt ein neues Objekt erzeugen mit dem jeweiligen Parameter.
Hier meine angefangene Schleife:
TfrmTechniqueBuilder::startMessablauf() { for (int i=0; i<frmMain->listMessablauf->Items->Count; i++) { if (frmMain->listMessablauf->Items->Strings[i] == "machDas") machDas(); else if (frmMain->listMessablauf->Items->Strings[i] == "wait") meineklasse.wait(); else if (frmMain->listMessablauf->Items->Strings[i] == "loop" meineklasse.loop(); } }
Wie macht man solch eine Liste bei dem der Programmablauf zur Laufzeit festgelegt wird?
-
Dazu kannst du das Command Pattern benutzen. Erstelle für jedes deiner Kommandos eine Klasse, die das gewünschte Verhalten implementiert, fülle eine Liste mit den auszuführenden Kommandos und arbeite sie der Reihe nach ab.
-
wie sieht so ein Kommando aus für eine Schleife wo ich zB. an einen bliebigen Schritt zurück springen will und das beliebig oft?
-
Was genau willst du denn eigentlich machen?
-
Statt einer for-Schleife wäre eine While-Schleife und eine extra Variable für den Index der aktuellen Anweisung sinnvoller, wenn du keinen linearen Ablauf haben willst (mit "loop" angedeutet).