Tag Archives: time

Simular una Progress Bar en C++

Una progress bar es la barrita, generalmente verde, que aparece en sistemas operativos e infinidad de programas cuando algo se está cargando. Hoy no nos vamos a meter en asuntos de cargar archivos o algo, únicamente vamos a ver el principio básico sobre el que operan estas barras.

Nuestro programa sólo pedirá una cantidad en segundos, que será el tiempo que durará en llenarse nuestra progress bar. A la ventana donde se ejecutan nuestros programas le caben 80 caracteres de largo, así que vamos a decir que nuestra progress bar tiene una resolución de 80. El único problema es saber cuánto durará cada unidad de esas 80 para que en total se acumule el tiempo indicado.

La función delay() o Sleep()

Si en su IDE pueden usar la librería conio.h, entonces van a usar la función delay(). Si no, vamos a tener que agregar la librería windows.h y usar la función Sleep() (así con mayúscula).

Ambas funciones hacen exactamente lo mismo: paran el programa durante una cierta cantidad de tiempo en milisegundos. Por ejemplo:
cout << "Hola" << endl;
Sleep(2000);
cout << "Hace dos segundos te saludé!";

Se muestra ‘Hola’, se pausa 2 segundos y se muestra ‘Hace dos segundos te saludé!’

Para los que usan conio.h, sería algo así:
printf("Holan");
delay(2000);
printf("Hace dos segundos te saludé!");

Ahora sí, para saber cuanto tiempo durará cada unidad de nuestra barra tenemos primero que convertir los segundos a milisegundos (s*1000), luego dividirlos entre la resolución de la barra (s*1000/80). Así que nuestro programa queda así:

#include
#include
using namespace std;

int main()
{
    int s;
    cout <> s;
    for(int i=0; i<=79; i++)
        cout << "_";
    for(int i=0; i<=79; i++)
    {
        cout << "=";
        Sleep(s*1000/80);
    }
}

El primer ciclo es solo por estética, para ver hasta donde va a llenar la barra. El segundo es el que imprime la barra con sus respectivas pausas.

Advertisements

Función delay() en C++

Una función a veces útil a veces no mucho es el delay(), sirve para hacer una pausa de ‘n’ segundos. En algunos compiladores Borland esta función se incluye en la librería conio.h pero como aquí estamos del lado del software libre vamos a hacer nosotros mismos esta función. Primero veamos cómo se usa:
delay(variable_tipo_int);
es decir:
int secs=10;
delay(secs);

o
delay(numero_entero);
es decir:
delay(12);
Y claro, la función es esta:
void delay(int secs) {
for(int i = (time(NULL) + secs); time(NULL) != i; time(NULL));
}

  1. La función time(NULL) nos devuelve el segundo exacto en que estamos.
  2. Si le sumamos cierta cantidad de segundos obtenemos una fecha en el futuro.
  3. En cada vuelta del ciclo se checa si esa fecha en el futuro es diferente a la fecha actual.
  4. En cuanto las dos fechas son iguales el ciclo acaba y el programa continúa.

Veamos como se usa en un programa en c++:

#include
#include
using namespace std;

void delay(int secs) {
  for(int i = (time(NULL) + secs); time(NULL) != i; time(NULL));
}

int main()
{
    int sec;
    cout <> sec;
    delay(sec);
}

Para poder usar la función delay de esta forma es necesario ponerla en todos los programas en donde necesitemos usarla (ahora me doy cuenta que no he escrito mucho sobre funciones) e incluir siempre la librería #include<time.h> o #include<ctime>.