C++ Konsole Statusanzeige
Was wäre eine einfache Möglichkeit der Implementierung einer Konsole-basierte Statusanzeige-für eine Aufgabe, die gerade ausgeführt wird, aber ich kann nicht voraussehen, wie viel Zeit es würde nehmen?
Ich verwendet, um dies zu tun, wenn ich codiert in Clipper, und es war nur eine Frage des Durchlaufens des chars '/', '-', '\', '|' und positionieren Sie diese an der gleichen Stelle.
Irgendeiner Weise /links /libs dafür (oder etwas ähnliches) in C++?
Ziel für diese *nix-Umgebungen.
Bearbeitet:
- den Titel geändert kohärenter und generic;
- Hinzugefügt Zielumgebung.
- Was hindert Sie daran das gleiche zu tun, in einer C++ Konsolenanwendung?
- Ich bin die Art von newbie in C++ und Konsolen-apps, so könnte ich jemand zeigen mich in die richtige Richtung mit metacode oder einen guten link über die subect.
- stackoverflow.com/questions/1365317/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen sehr einfachen Weg, es zu tun ist, drucken Sie eine Zeichenfolge gefolgt von einem
'\r'
Charakter. Das ist carriage return, indem Sie selbst und auf den meisten Konsolen, es gibt den cursor an den Anfang der Zeile, ohne nach unten bewegen. Das ermöglicht das überschreiben der aktuellen Zeile.Wenn Sie schreiben auf stdout oder cout oder verstopfen denken Sie daran fflush oder std::flush, den stream an machen Ausgang die Linie sofort. Wenn Sie das schreiben auf stderr oder cerr dann der stream ist Ungepuffert und alle Ausgabe erfolgt sofort (und ineffizient).
Ein komplizierter Weg, es zu tun ist, um in der Verwendung eines Bildschirm-Zeichnung Bibliothek wie Flüche. Das Windows-Konsolen haben einige andere Möglichkeiten der Einstellung, die Sie für die direkte Bildschirm schreiben, aber ich weiß nicht, was Sie sind.
Könnten Sie versuchen, so etwas wie:
Natürlich, dies ist nicht standard, weil der sub-Sekunde
usleep()
und ich bin mir nicht sicher, ob es eine Garantie dafür, dass\b
löscht ein Zeichen oder nicht, aber es funktioniert auf den meisten Plattformen. Sie können auch versuchen\r
statt, wenn\b
nicht den trick tun. Ansonsten, versuchen zu finden, eine version von Flüche.Bearbeiten (Flüche Probe)
Dieser sollte Ihnen den Einstieg:
Stellen Sie sicher, um die Verknüpfung mit entweder
-lcurses
oder-lncurses
. Das sollte funktionieren auf jedem UNIX gleich draußen.Boost hat eine Fortschritt-Bibliothek, die helfen können, einige dieser Dinge
Wow,
clipper
, vielleicht sprechen Sie über die @row,col Dinge eingebaut, um die Sprache? (Rhetorische Frage, nur...)Können Sie tun, einfache Fortschritts-Balken mit printf: lassen Sie sich die trailing newline. Sie können natürlich am Anfang oder am Ende der Zeichenfolge \b, um die überdrucken-Zeichen. Es ist einfach zu tun die traditionelle -\|/Art, Weise.
Ich erinnere mich, dass die Eclipse-UI-Richtlinien empfohlen Statusanzeigen unabhängig davon, wie viel Sie in der Lage waren zu sagen, über die tatsächlichen Fortschritte. Ich denke, die Theorie, dass alles ist besser als nichts und nur die beste Sie tun können.
Der einzige trick, den Sie wahrscheinlich brauchen, ist potenziell zu besiegen Linie der Pufferung. Werden Sie sicher, dass
fflush(stdout)
nach jedem Ausgabe-Vorgang. (Oder ostream::flush())