Schleifendurchlauf verlangsamen
-
Hallo zusammen,
ich versuche einen Schleifendurchlauf zu verlangsam, indem ich bei Tastendruck auf '+' einen Schleifenendwert vergrößere. So sieht der Quelltext aus:#include <iostream> #include <conio.h> #define DELAY 100000L #define ESC 27 using namespace std; int main() { int c, pause=10; bool k = true; while(k) { for (int i=0; i < 10; i++) { if (kbhit != 0) { c = getch(); if (c == ESC) cout << "Sie haben ESC gedrueckt."; if (c == '+') { cout << "Sie haben + gedrueckt."; pause+=10000; } } for (int k=0; k<pause; k++); cout << i << endl; // Diese Stelle wird nur beim Tastendruck von ESC oder + erreicht. } } return 0; }Meine Frage ist nun, warum nicht andauernd die Zahlen 1 bis 10 ausgegeben werden. Die cout Stelle wird nämlich anscheinend nur bei Tastendruck auf ESC oder + erreicht, obwohl cout noch in der Schleife steht. Wenn ich nun + gedrückt habe, dann erhöht sich pause um 10000 und somit sollen die Zahlen langsamer ausgegeben werden.
Könnt ihr mir bei meinem Problem helfen?
Vielen Dank
lg, freakC++
-
Was mich wundert, ist kbhit statt kbhit().
-
Tatsächlich! Daran hat es gelegen! Vielen Dank. Dennoch bin ich ein bisschen enttäuscht, denn das mit der Verzögerung funktioniert nicht. Kann mir jemand sagen, was ich daran ändern muss?
Vielen Dank
lg, freakC++
-
freakC++ schrieb:
Tatsächlich! Daran hat es gelegen! Vielen Dank. Dennoch bin ich ein bisschen enttäuscht, denn das mit der Verzögerung funktioniert nicht. Kann mir jemand sagen, was ich daran ändern muss?
Vielen Dank
lg, freakC++gute compiler optimieren
for (int k=0; k<pause; k++);ersatzlos weg.
aber ich kenne keinen, der schonfor (int k=0; k<pause; k++) cout<<"";wegoptimieren kann.
-
Mit ein paar zehntausend Schleifendurchläufen verlangsamst du auf heutigen Rechnern nicht viel.
Versuch mal was im 9-stelligen Bereich.
-
Hallo,
vielen Dank für eure Tipps. Das Programm funktioniert nun. Klar ein Compiler optimiert...habe nicht daran gedacht! Doch habe ich dazu noch eine Frage. Warum löscht der Compiler die for-Schleife nicht mehr, wenn ich das cout << "" hinzugefügt habe. Es hat schließlich nichts mit der Schleife zu tun, da ich die Schleife, ja schon mit dem Semikolon beendet habe!Vielen Dank
lg, freakC++
-
freakC++ schrieb:
Es hat schließlich nichts mit der Schleife zu tun, da ich die Schleife, ja schon mit dem Semikolon beendet habe!
Weiß nicht.
Allein Nanyukis Antwort kann reichen, wenn der Compiler nicht optimiert und Du jetzt beim Testen viel länger + gedrückt hast.
Zeig am besten bei jeder Frage den aktuellen Code, damit es nicht zu Mißtverständnissen kommt.