Willkürlicher Programmabsturz, Alternative zu Sleep() ?
-
Hallo zusammen,
ich habe in meinem Programm eine Warteschleife die dafür sorgen soll dass auch der Fortschritt bis zum nächsten Durchlauf angezeigt wird.
while(true) { -->> Funktionsaufruf // Warteschleife für den nächsten Durchlauf cout << "|"; for(int i_loop = 0; i_loop < 75; i_loop++) { cout << ">>"; Sleep(1200); cout << '\b'; cout << '\b'; cout << "="; Sleep(1200); } cout << "|\n"; }Jedoch stürtzt das Programm immer wieder mal ab. Und wenn es abstürtzt dann in dieser Warteschleife. Die Warteschleife wird öfters erfolgreich durchlaufen.
Ist Sleep() instabil? Gibt es eine Alternative dazu?
-
Hallo
Hast du es mal mit dem Debugger probiert?
chrische
-
Abgesehen von dem bug, ist diese Warteschleife tatsaechlich das, was Du moechtest?
Zum einen ist Deine Zusgabe gepuffert - auf meinem System (Debian/etch, g++ 3.3.5) werden alle Zeichen zusammen erst am Ende des Programmes ausgegeben.
Zum anderen wird doch erst die Funktion aufgerufen, abgearbeitet, und dann die Warteschlange erledigt. D.h., Dein Programm hat einfach eine Pause an dieser Stelle.
-
cout ist gepuffert. ein flush vor jedem sleep ist folglich empfehlenswert.
cout << ">>" << flush; Sleep(1200); cout << '\b' << '\b' << "=" << flush; Sleep(1200);
-
Danke für die ganzen Antworten.
Ich habe mal das mit dem flush noch eingebaut, hoffe es hat einen Effekt wenn ich vor dem sleep den buffer leere.Lass das Tool grad laufen, Fehler kommt leider nur sehr unregelmäßig.
Bei mir (Windows) erfüllt die Schleife ihren optischen Effekt. Wie ein Ladebalken.
Wenn Jemand einen Vorschlag hat wie ich besser eine Funktion im Stundentakt aufrufen kann und eine optische Anzeige hab würd ich mich drüber freuen diese Variante mal zu sehen.
-
So wäre es kürzer und übersichtlicher:
cout << ">>" << flush; Sleep(1200); cout << "\b\b=" << flush; Sleep(1200);