Hacer un temporizador de cuenta regresiva en C++

Suraj P 12 octubre 2023
  1. Hacer un temporizador de cuenta regresiva en un entorno Unix
  2. Hacer un temporizador de cuenta regresiva en Windows
  3. Crear un temporizador de conteo ascendente en C++
Hacer un temporizador de cuenta regresiva en C++

Este artículo enseñará cómo hacer un temporizador de conteo ascendente y descendente en C++. Primero, veamos cómo hacer un temporizador de cuenta atrás en C++.

La forma en que funciona es que tomamos los minutos y los segundos del usuario como entrada, y luego usando el bucle en nuestro programa, imprimiremos los segundos en orden inverso o en cuenta regresiva.

Podemos usar un bucle como el bucle while o el bucle for que contará hacia atrás hasta que el número llegue a 1, y dentro de este, necesitamos un mecanismo para pausar el programa durante 1 segundo para ver el cambio.

Disponemos de diferentes funciones (llamadas al sistema) en entornos tipo Unix y Windows para pausar un programa o hacerlo sleep. Sin embargo, tienen la misma funcionalidad.

Hacer un temporizador de cuenta regresiva en un entorno Unix

Cualquier máquina similar a Unix, Linux o Ubuntu, tiene una función llamada usleep que toma el tiempo en microsegundos para dormir el programa. Necesitamos pasar el valor como 1000000 para pausar la ejecución por un segundo.

Este método se define en el archivo de cabecera unistd.h.

Código de ejemplo:

#include <unistd.h>

#include <ctime>
#include <iostream>
using namespace std;

string getPresentDateTime() {
  time_t tt;
  struct tm *st;

  time(&tt);
  st = localtime(&tt);
  return asctime(st);
}

int main() {
  int seconds;
  cout << "Enter total number seconds for the counter" << endl;
  cin >> seconds;

  while (seconds >= 1) {
    cout << "Counter : " << seconds << " : " + getPresentDateTime() << endl;
    usleep(1000000);
    seconds--;
  }
}

En el programa anterior, usamos el método getPresentDateTime() para obtener la fecha y hora actual del sistema.

Salida: El programa anterior se ejecutó en Ubuntu. Para ejecutarlo en un entorno similar a Unix, guarde el archivo, use g++ para compilarlo y escriba ./a.out para ejecutarlo.

g++ first.cpp   //executed in ubuntu
 ./a.out

Enter total number seconds for the counter
7
Counter : 7 : Sun Mar 13 01:31:56 2022

Counter : 6 : Sun Mar 13 01:31:57 2022

Counter : 5 : Sun Mar 13 01:31:58 2022

Counter : 4 : Sun Mar 13 01:31:59 2022

Counter : 3 : Sun Mar 13 01:32:00 2022

Counter : 2 : Sun Mar 13 01:32:01 2022

Counter : 1 : Sun Mar 13 01:32:02 2022

Hacer un temporizador de cuenta regresiva en Windows

Todo queda tal como lo hemos hecho arriba; la única diferencia es que debemos incluir windows.h en lugar de unistd.h. Y en lugar de usleep, tenemos que usar el método sleep().

El método sleep() toma tiempo en milisegundos.

Código de ejemplo:

#include <Windows.h>

#include <ctime>
#include <iostream>
using namespace std;

string getPresentDateTime() {
  time_t tt;
  struct tm *st;

  time(&tt);
  st = localtime(&tt);
  return asctime(st);
}

int main() {
  int seconds;
  cout << "Enter total number seconds for the counter" << endl;
  cin >> seconds;

  while (seconds >= 1) {
    cout << "Counter : " << seconds << " : " + getPresentDateTime() << endl;
    Sleep(1000);
    seconds--;
  }
}

Salida: El programa anterior se ejecutó en IDE presente en Windows.

Enter total number seconds for the counter
10
Counter : 10 : Sun Mar 13 01:42:13 2022

Counter : 9 : Sun Mar 13 01:42:14 2022

Counter : 8 : Sun Mar 13 01:42:15 2022

Counter : 7 : Sun Mar 13 01:42:16 2022

Counter : 6 : Sun Mar 13 01:42:17 2022

Counter : 5 : Sun Mar 13 01:42:18 2022

Counter : 4 : Sun Mar 13 01:42:19 2022

Counter : 3 : Sun Mar 13 01:42:20 2022

Counter : 2 : Sun Mar 13 01:42:21 2022

Counter : 1 : Sun Mar 13 01:42:22 2022

Ahora echemos un vistazo a un temporizador de contador.

Crear un temporizador de conteo ascendente en C++

Se implementa como un contador regresivo, la única diferencia es que ejecutamos el bucle de manera de reenvío, que es un enfoque incremental.

Código de ejemplo: Contador ascendente en un entorno Windows.

#include <Windows.h>

#include <ctime>
#include <iostream>
using namespace std;

string getPresentDateTime() {
  time_t tt;
  struct tm *st;

  time(&tt);
  st = localtime(&tt);
  return asctime(st);
}

int main() {
  int seconds;
  cout << "Enter total number seconds for the counter" << endl;
  cin >> seconds;

  int count = 0;

  while (count != 10) {
    cout << "Counter : " << seconds << " : " + getPresentDateTime() << endl;
    Sleep(1000);
    seconds++;
    count++;
  }
}

En el código anterior, incrementamos los segundos 10 veces. Y para realizar un seguimiento, hemos introducido una variable count, que se detiene cuando se completan 10 segundos desde el momento en que se dio la entrada seconds.

Producción :

Enter total number seconds for the counter
5
Counter : 5 : Sun Mar 13 02:15:42 2022

Counter : 6 : Sun Mar 13 02:15:43 2022

Counter : 7 : Sun Mar 13 02:15:44 2022

Counter : 8 : Sun Mar 13 02:15:45 2022

Counter : 9 : Sun Mar 13 02:15:46 2022

Counter : 10 : Sun Mar 13 02:15:47 2022

Counter : 11 : Sun Mar 13 02:15:48 2022

Counter : 12 : Sun Mar 13 02:15:49 2022

Counter : 13 : Sun Mar 13 02:15:50 2022

Counter : 14 : Sun Mar 13 02:15:51 2022
Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Artículo relacionado - C++ Timer