Hallo,
bin noch nicht allzu lange in delphi unterwegs, sitz aber grad an ner Facharbeit über
Staupotentiale auf Autobahnen. Hier mein Problem:
Die Bewegung jedes einzelnen Fahrzeugs wird über einen eigenen timer geregelt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TAuto.Bewegen(Sender:TObject); begin Inc(step); Strasse.Fahrbahnfrei[Y,X]:= -1; Inc(X); Strasse.Fahrbahnfrei[Y,X]:= autonr; SetzePos (X,200-10*Y); Application.ProcessMessages; If (step>10) Then Fahrtakter.Enabled:= False; end; |
Allerdings ist diese nur ein Teil des Betriebstaktes, der sich am Ende wieder selbst aufruft.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TAuto.Fahren; begin A1:=acc1; A2:=acc2; If (A1 < A2) Then Begin Spurwechsel; V:= V + A2 End Else V:=V + A1; step:=0; Fahrtakter.Interval:= round(1000/V); Fahrtakter.Enabled:= True; end;
procedure TAuto.BetriebsTakt; begin Fahren; If (WaitFor>-200) Then If (X>725) Then Begin Fahrtakter.Enabled:= False; Strasse.Fahrbahnfrei[Y,X-laenge]:= -1; Strasse.Fahrbahnfrei[Y,X]:=-1; SetzePos(20,20); Corpus.Visible:= False; End Else Betriebstakt; end; |
Doch es endet logischerweise ständig in einem StackOverflow, weil das Hauptprogramm nicht wartet, bis die Fortbewegung des Objekts, abgeschlossen ist. Darüber hinaus, dürfen die anderen Fahrzeuge nicht beeinflusst werden...Die von der Hilfe angebotene WaitFor-Methode konnte ich nicht entsprechend verwenden, vll aber auch nur aus mangelnder Fähigkeit.