Autor Beitrag
Leto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

XP
D7 Enterprise
BeitragVerfasst: So 25.07.04 14:46 
Hoffe das man mir auf die Sprünge helfen kann. Arbeite mich gerade in Delphi an hand eines Simulationsprogramms ein. Dazu muss in einer Schleife immer der nächste Schritt der Simulation ermitteln werden und nach jedem schritt die Ergebnisse auf Labels rausschreiben.

Auszug:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  continue := true;
  while(continue) do
  begin
    //Prozeduraufruf für nächsten Schritt
    //Ausgabe der Eregnbisse auf sie Labels
    sleep(100);
  end;


Die Simulationsschleife ist in einem Buttonklick implementiert. Ein anderer Button setzt das Flag continue wieder auf false. Die Schleife (so mein Plan) wird dann beendet. leider reagiert das programm auf nix mehr, wenn ich einmal starte. Wo ist mein problem?

(Bitte verschieben falls in der falschen Area hinterlegt)

Moderiert von user profile iconPeter Lustig: PHP- durch Delphi-Tags ersetzt

_________________
Carpe Noctem
DelphiFreund
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 120

Win XP
D7 Enterprise
BeitragVerfasst: So 25.07.04 14:51 
bei sleep wird das ganze Programm angehalten. (glaub ich)
Leto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

XP
D7 Enterprise
BeitragVerfasst: So 25.07.04 14:55 
ich wollte mit dem sleep den Prozessor entlasten, damit auch andere Threads mal drankommen. Habs gerade gerade ausprobiert: Am sleep(...) liegt es leider nicht.

_________________
Carpe Noctem
DelphiFreund
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 120

Win XP
D7 Enterprise
BeitragVerfasst: So 25.07.04 15:04 
Muss man nicht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
while (continue=true) do
begin
  ...
end;


schreiben
Leto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

XP
D7 Enterprise
BeitragVerfasst: So 25.07.04 15:10 
Hmmm... dürfte nicht das Problem sein, da continue an sich ja ein boolescher ausdruck ist. Ich habs für alle Fälle umgeändert, aber daran liegts auch nicht.

Irgendwie muss ich einem Anfängerfehler unterliegen, der mir nicht einfallen will.

_________________
Carpe Noctem
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 25.07.04 15:14 
Sleep "friert" den aufrufenden Thread ein.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  continue := true;  
  while(continue) do  
  begin  
    //Prozeduraufruf für nächsten Schritt  
    //Ausgabe der Eregnbisse auf sie Labels  
    sleep(100);  
  end;


oder so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
while (continue=true) do  
begin  
  ...  
end;


Macht keinen Unterschied.

Zwei Möglichkeiten, wenn du willst, dass dein Programm noch reagiert und der Klick auf die Schlatfläche eine Wirkung zeigt. Entweder du lagerst das alles in einen Thread aus. Was für mich auf den ersten Blick die sinnvollere Möglichkiet wäre, aber für einen Anfänger wohl noch etwas zu komplex ist. Oder du rufts in der Schleife Application.Processmessages auf, damit dein Fenster die anstehenden Nachrichten abarbeitet.
DelphiFreund
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 120

Win XP
D7 Enterprise
BeitragVerfasst: So 25.07.04 15:14 
Na dann tuts mir leid, bin auch nicht gerade gut im Programmieren.
Aber du wirst den Fehler schon finden.

Gruß DelphiFreund
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 25.07.04 15:17 
Hallo!

Du hast zwei Möglichkeiten:
(1) Das ganze in einen Thread auslagern. Schau mal auf www.luckie-online.de in den WInAPI-Tutorials, ich glaube, da steht auch was über Threads drin
(2) Baue mal ein "Application.ProcessMessages" in die Schleife ein!

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Leto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

XP
D7 Enterprise
BeitragVerfasst: So 25.07.04 15:24 
naja, Threads sollten dann nicht gleich am zweiten tag behandelt werden -> das kommt schon noch.

Verstehe, letztere Anweisung signalisiert dem WindowManager nochmal nachzugucken, ob irgendein Ergegnis in der Zwischenzeit aufgerufen wurde. Gibt sich nach außen hin etwas anmders als bei java und C++. Sehr gut, Das reicht erstmal.

Vielen dank an euch alle.

_________________
Carpe Noctem
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 25.07.04 15:26 
Wie das bei Java ist weiß ich nicht, aber mit C++ hat das nichst zu tun, da es eine Systemfunktion von Windows ist.