C/C++: Indicador de progeso
A muchos os parecerá una tontería de entrada, pero si supieseis el tiempo que llevo diciendo: “a ver si un día de estos averiguo como programar un indicador de progreso para mis aplicaciones C++ … :ZZZ: “, y hoy me ha dado por averiguarlo :victory:. A continuación os muestro el código y os lo explico brevemente ya que tampoco tiene mucho misterio una vez que te pones con ello.
// ================================================================
//
// Filename: percentage.cpp
//
// Description:
//
// Version: 1.0
// Created: 10/11/09 11:51:42
// Revision: none
// Compiler: g++
//
// Author: piponazo (piponazo@plagatux.es)
// Company: http://plagatux.es
//
// ================================================================
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// === FUNCTION ====================================================
// Name: main
// Description:
// ===============================================================
int main ()
{
try
{
unsigned int operations = 500;
float inc = 100.0f / (static_cast<float>(operations)-1.0);
float progress = 0.0f;
for (unsigned int i=0; i<operations; i++)
{
usleep(10000);
progress+=inc;
cout << "Progress: " << static_cast<unsigned int>(progress)
<< "%\r" << flush;
}
cout << endl;
}
catch (exception &ex)
{
cout << ex.what() << endl;
}
return EXIT_SUCCESS;
}
Lo más importante lo podemos encontrar en la línea 39. \r es un caracter de escape que nos permite posicionar el cursor al principio de la línea, mientras flush nos permite sincronizar el buffer asociado a un stream. En cristiano, que nos muestra lo que queremos mostrar sin que haya que introducir un retorno de carro. El resto es simplemente para que veáis en funcionamiento un ejemplo. En la línea 36 nos encontramos con la función usleep que nos permite dormir el proceso X microsegundos, mientras que en la línea 32 calculo en cuanto se incrementa la variable de progreso en cada operación.
loading...

loading...
De tontería nada
Muy útil! Gracias.
loading...
Jeje si no os parece tontería pues mejor :nerd:.