![]() |
Problem: die ausgabe soll verzoegert werden
Hi !
zu meinem Problem: Ich möchte das der Anwender meines programms die veränderungen sehen kann während der algorithmus durchläuft! Nur wie kann man es erreichen, wenn ich sleep und co innerhalb der procedure verwende wartet das programm seine zeit und gibt dann das endergebnis aus! wie kann mann die ausgabe der werte (siehe code KW_dist,pre,R)so gestalten das erst die initialisierung dagestellt wird dann die weiteren veränderungen! die Aktuellesituauin soll auf stringgrid ausgegeben werden.
Delphi-Quellcode:
könnt ihr mir helfen?
procedure Dijkstra_Pfeil ( var pre,kw_dist:TKnoten; var b,c:TPfeil;{Endknotennummernvektor, Bewertungsvektor}
var PN:TKnoten_plus_1_feld; {Pfeilnummernvektor} Knotenzahl:integer; Start:integer;var stringgrid1:Tstringgrid); {Anzahl Knoten} var locali,localj,min:integer; R:array [1..8] of boolean; begin //Initialisierung for locali:=1 to Knotenzahl do begin pre[locali]:=0; stringgrid1.Cells[locali,1]:=inttostr(pre[locali]); kw_dist[locali]:=999; stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]); R[locali]:=true; end; kw_dist[Startknoten]:=0; stringgrid1.Cells[locali,2]:=inttostr(kw_dist[startknoten]); R[Startknoten]:=true; while true do {Wiederholung Schritt 1 + 2} begin //Schritt 2 min:=999; for localj:=1 to Knotenzahl do if R[localj] and (kw_dist[localj] < min) then begin min:=kw_dist[localj]; locali:=localj; end; if min = 999 then exit; //Schritt 3 for localj:=PN[locali] to PN[locali+1]-1 do if R[b[localj]] or ( kw_dist[b[localj]] = 999 ) then if kw_dist[locali] + c[localj] < kw_dist[b[localj]] then begin kw_dist[b[localj]]:= kw_dist[locali] + c[localj]; pre[b[localj]]:=locali; R[b[localj]]:= True; end; R[locali]:= False; stringgrid1.Cells[locali,1]:=inttostr(pre[locali]); stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]); end; {Ende Schritt 1 und 2} end; |
Re: Problem: die ausgabe soll verzoegert werden
![]() |
Re: Problem: die ausgabe soll verzoegert werden
was bewirkt Application.ProcessMessages?
die ergebnisse mussten doch einem stringgrid oder so übergeben werden, damit sich die tabelle je nach der aktuellen lage im algorithmus aktualisiert? |
Re: Problem: die ausgabe soll verzoegert werden
es bewirkt das die Veränderungen angezeigt werden sozusagen als zwischen status. dementsprechend solltest du diesen Befehl einfügen nachdem du in dein stringgrid schreibst. als alternative wären threads zu nennen
|
Re: Problem: die ausgabe soll verzoegert werden
um wieviel zeit muss mann dann noch verzögern?
oder beinhaltet dieses schon eine "lesbare" verzögerung? |
Re: Problem: die ausgabe soll verzoegert werden
ach meinst du das wird komplett verändert ? dann würde ich zu delay raten zu finden in der codelib
|
Re: Problem: die ausgabe soll verzoegert werden
Liste der Anhänge anzeigen (Anzahl: 2)
der code oben ist der dijkstra algorithmus
und er hatt ja mehere durchläufe (besonders bei schritt 2+3) bis er das energebnis hat und diese zwischen werte sollen jeweis angezeigt werden bzw die im stringgrid "vorhandenen" werte sollen durch die ermittelten werte "aktualisiert" werden (das müste doch dann wenn es klapt doch auch analog zu übertragen sein, wenn er die gezeichnete pfeile durch andersfarbige pfeile ersetzen soll sprich z.B. gerade im angriff genommener pfeil (gelb), dieser pfeil stellt verbesserung da grun...) im anhang die komplette unit |
Re: Problem: die ausgabe soll verzoegert werden
naja ist ja realtiv egal wenn du eine bestimmte zeit aussetzen willst dann musst du diese
![]() ![]()
Delphi-Quellcode:
am ende bei dir ein
delay(100); //bsp 100 = 100 ms
Delphi-Quellcode:
stringgrid1.Cells[locali,1]:=inttostr(pre[locali]); stringgrid1.Cells[locali,2]:=inttostr(kw_dist[locali]); // Hier end; {Ende Schritt 1 und 2} end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz