Langsame While-Schleife???
-
Hi,
Ich wollte eine While-Schleife machen, die in ein Label immer nach einer sec ein Text einträgt nur irgendwie bekomme ich es nicht wirklich hin, ich habe jetzt mit dem Sleep-Befehl gearbeitet.
if (Button1->Caption=="start"){ Button1->Caption="stop"; while ( 1==1 ) { Label1->Caption="test"; Sleep (1000); } } else { Label2->Caption="ende"; Button1->Caption="start"; }Irgendwie klappt das mit der while-schleife nicht wirklich ...
vielen Dank
mfg mich0r
-
Nunja, du hast jetzt eine Endlosschleife, die den Label solange immer wieder mit "test" beschriftet, bis du entnervt das Programm abschießt. Ob es das ist, was du wolltest...?
-
Hallo
Irgendwie klappt das mit der while-schleife nicht wirklich ..
Ist keine ausreichende Fehlerbeschreibung!
Auf jedenfall hast du da eine Endlosschleife, und deren Effekt siehst du auch nie, da die GUI nicht innerhalb der Schleife aktualiisert wird.
Auch die Überprüfung der Button-Caption zur Flußkontrolle halte ich für schlecht.Jedenfalls ist bei dir TTimer die bessere Wahl. Das kannst du auch an- und abschlaten, hast also gleich auch immer den Zustand.
/Edit : Ich renne heute irgendwie CStoll hinterher...
bis bald
akari
-
Hi nochmal

Also wenn ich das Programm compile hängt es sich auf. Es schreibt noch nichtmal in das erste Label test hinein. Ich wollte es so schreiben, dass wenn ich auf start klicke immer wieder in Label1 test geschrieben wird, bis man stop drückt. Weil es eine endlos-schleife ist wollte ich einen Timer setzten, weil sonst die CPU auf 100% hochschießt. Über Hilfe bzw Anregungen wie ich es realiseren kann bin ich sehr Dankbar !!
mfg mich0r
-
Hallo
Also wenn ich das Programm compile hängt es sich auf. Es schreibt noch nichtmal in das erste Label test hinein.
akari schrieb:
Auf jedenfall hast du da eine Endlosschleife, und deren Effekt siehst du auch nie, da die GUI nicht innerhalb der Schleife aktualiisert wird.
Auch die Überprüfung der Button-Caption zur Flußkontrolle halte ich für schlecht.Weil es eine endlos-schleife ist wollte ich einen Timer setzten
Ja, wolltest du vielleicht, hast du aber nicht. Sleep ist kein Timer.
Über Hilfe bzw Anregungen wie ich es realiseren kann bin ich sehr Dankbar
Du hast es doch bereits angesprochen, und ich habe dir auch schon den Tip gegeben : Schau dir TTimer in der BCB-Hilfe an.
bis bald
akari
-
Hi,
da ich leider noch nicht so der Experte in C++, bcb bin bitte ich erstmal um Verständnis :).Habe mir den TTimer bei bcb-Hilfe angeguckt verstehe ich aber nicht wirklich bzw. kannst du mir vill ein Code-Beispiel geben ??
mfg mich0r
-
Hallo
- eine TTimer-Komponente auf ein Form setzen
- die Eigenschaften Interval und Enabled setzen
- über den Objektinspektor für den OnTimer-Event die passende Methode erzeugen
- in die Methode das schreiben, was nach Ablauf des Intervalls jeweils passieren sollbis bald
akari
-
Nocheinmal Hallo ^^
so ich habe es jetzt mit dem TTimer versucht und es funktioniert auch. Aber er Zeigt alle Ausgaben nach dem Timer-Interval an. Ich möchte es aber so machen, dass er nach jedem Interval einmal die While-Schleife durchläuft und auf der Gui anzeigt.
Soll Ausgabe:
__Label1________________________________________________________________
|0 (1 sec warten) 1 (1 sec warten) 2 (1 sec warten) 3 (1 sec warten) ... |
|________________________________________________________________________|Ist Ausgabe
__Label1__________________
|(1 sec warten) 0 1 2 3 ...|
|__________________________|__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (Button1->Caption=="start"){ Label1->Caption=""; Button1->Caption="stop"; TimerGo=true; } else { Label2->Caption="ende"; Button1->Caption="start"; TimerGo=false; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { int zahl = 1; String test = 0; if(TimerGo==true){ while (zahl<=10) { test = test + zahl+" "; Label1->Caption=test; zahl++; } } }mfg mich0r
-
Woran könnte das wohl nur liegen? Denk mal scharf drüber nach was du grade in der Timer-Routine implementiert hast...
-
Ja hätte ich es schonmal gemacht würde ich sicherlich nicht diesen Thread eröffnet haben ... verstehe es nicht warum er bei der while-schleife nicht nacheinander im Label1 eine Zahl hoch zählt! ... Kann mir nicht einer helfen und sagen wie der Code lauten müsste??? .. -.-
Woran könnte das wohl nur liegen? Denk mal scharf drüber nach was du grade in der Timer-Routine implementiert hast...
Hilft mir leider nicht weiter weil ich noch nicht soviel mit c++ gemacht habe und Einsteiger bin ... also BITTE ein code-beispiel ...
-
mich0r schrieb:
Hilft mir leider nicht weiter weil ich noch nicht soviel mit c++ gemacht habe und Einsteiger bin ... also BITTE ein code-beispiel ...
Du wirst doch wohl nachvollziehen können, was deine Funktion tut? oder betreibst du Quantenprogrammierung? Kleiner Tip: Der Timer läuft ab, ruft "OnTimer" auf, und diese Funktion wird zu ende ausgeführt...
-
Hallo mich0r,
ich bin mir nicht ganz sicher ob das mit einem Timer die richtige Lösung ist.
Wenn ich Dich richtig verstanden habe möchtest Du doch einfach (per ButtonKlick) ein Label mit den Zahlen 1......x füllen, mit einer zeitlichen verzögerung?
Ich denke Dein Ansatz mit einer while-Schleife war garnicht so verkehrt
Um dich nicht länger auf die Folte zu spannen, hoffe ich das Dir evtl. dieser Sourceausschnitt weiterhilft ?void __fastcall TForm1::Button1Click(TObject *Sender) { int i = 0; Label->Caption = ""; while (i < 10) { Label->Caption = Label->Caption + IntToStr(i) + " "; Sleep(1000); Application->ProcessMessages(); i++; } }Wenn Du noch Fragen bzgl. des Sources hast, meld Dich einfach
Viel Spaß beim Ausprobieren
Gruß
Wes
-
Hallo MichOr
die Timer sind nur ganz am Anfang schwierig.
Da muß man durch.was ist denn TimerGo ?
TimerGo=true;MfG Schlumpi.