www.mikrocontroller.net

Forum: PC-Programmierung C++ konsole Prozessfortschritt anzeigen?


Autor: Phillipp D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich hätte gerne in meinen Programmen bei Berechnungen oder Ausführen von 
zeitintensiven Befehlen im Hintergrund eine Anzeige des Fortschritts in 
Prozent. Die Programme werden nur in der Konsole ausgeführt.

Ich finde dazu aber kein Beispiel wie man sowas macht.
Also in der Konsole soll es dann aussehen wie:

Berechne .... 42%

oder besser noch diesen netten Balken:

Berechne :  [=========                ] 42%

Hat da jemand irgenwo ein Beispiel oder irgendeinen Link? Oder wie nennt 
man denn sowas, ich finde nichts.


Vielen Dank für Tips!

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nennt sich in der Regel 'Steuercodes' für das Terminal.
Such mal nach Anleitungen zum VT100 oder sowas, da ist beschrieben, wie 
man den Cursor bewegt, Zeichen löscht, Farben einstellt und so weiter.

Klappt dann z.B. mit jedem VT100-Terminal.

Weitere Stichworte:
- termios
- termcap
- ncurses

Autor: El Cattivo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Betriebssystem denn?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die simpelste Moeglichkeit (nur unter Linux getestet):
#include <iostream>
#include<cstdlib>
#include<unistd.h>

void print_progress(const float& percentage)
{
        printf("\rProgress: %6.2f%%", percentage);
        fflush(stdout);
}

int main()
{
        printf("starting....\n");
        for (float f(0.0); f < 100.0; f += 1.27)
        {
                print_progress(f);
                usleep(100000);
        }
        printf("\n...done\n");
}

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Richtung, die Sven vorgibt, ist richtig.
Zudem wird man noch die Pufferung abstellen müssen.

Ich habe mal spaßeshalber das ganze in einer dreist-primitiven
Variante probiert: Zeile ausgeben, nach einer Weil mit Backspace
wieder löschen, und neu ausgeben:
#include <stdlib.h>
//#include <stddef.h>
#include <stdio.h>
//#include <stdint.h>
#include <unistd.h> // bei Linux


int main( int nargs, char **args )
{
  int iProzent;

  for( iProzent=0; iProzent<=100; ++iProzent )
  {
    // Zeile ausgeben:
    int nZeichen = printf( "Berechne: [" );
    int i, iBlock;
    // Damit es in eine Zeile passt, nur halb soviele Blcke ausgeben
    // wie maximal Prozent vorkommen:
    for( iBlock=0; iBlock<iProzent/2; ++iBlock )
    {
      putchar( '=' );
      nZeichen++;
    }
    // den Rest auf 100 mit Leerzeichen füllen:
    for( ; iBlock<100/2; ++iBlock )
    {
      putchar( ' ' );
      nZeichen++;
    }
    // restliche Zeile:
    nZeichen += printf( "] %3d%%", iProzent );
    fflush( stdout );

    sleep( 1 );
    // vor der nächsten Zeile entsprechend viele Backspace ausgeben:
    for( i=0; i<nZeichen; ++i )
    {
      putchar( '\b' );
    }
  }

  printf( "Ich habe fertig!\n" );


  return 0;
}

Das sieht in einem xterm-Fenster absolut sauber aus und flackert nicht.
Vielleicht geht das dann sogar ohne Änderung unter Windows.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom schrieb:
> \r

stimmt, auch eine Möglichkeit (und einfacher als meine Version)!

Autor: Frickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
boost::progress_display aus dem timer Paket

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.