#include <iostream>
#include <conio.h>
#include <chrono>
#include <thread>
using namespace std;
class Cronometro {
public:
void iniciar();
void pausar();
void reiniciar();
void salir();
void ejecutar();
private:
bool enEjecucion;
chrono::steady_clock::time_point inicio;
chrono::steady_clock::duration tiempoPausado;
};
void Cronometro::iniciar() {
inicio = chrono::steady_clock::now();
enEjecucion = true;
}
void Cronometro::pausar() {
if (enEjecucion) {
tiempoPausado += chrono::steady_clock::now() - inicio;
enEjecucion = false;
}
}
void Cronometro::reiniciar() {
if (!enEjecucion) {
inicio = chrono::steady_clock::now();
enEjecucion = true;
}
}
void Cronometro::salir() {
enEjecucion = false;
}
void Cronometro::ejecutar() {
while (enEjecucion) {
system("cls"); // Limpia la pantalla (Windows)
chrono::steady_clock::duration tiempoTranscurrido = chrono::steady_clock::now() - inicio - tiempoPausado;
int segundos = chrono::duration_cast<chrono::seconds>(tiempoTranscurrido).count();
cout << "Cronómetro: " << segundos << " segundos" << endl;
cout << "Presiona 'i' para iniciar, 'p' para pausar, 'r' para reiniciar, 's' para salir." << endl;
// Espera un segundo antes de volver a mostrar el tiempo
this_thread::sleep_for(chrono::seconds(1));
}
}
int main() {
Cronometro cronometro;
char tecla;
do {
tecla = _getch(); // Captura una tecla sin necesidad de presionar Enter
switch (tecla) {
case 'i':
cronometro.iniciar();
break;
case 'p':
cronometro.pausar();
break;
case 'r':
cronometro.reiniciar();
break;
case 's':
cronometro.salir();
break;
}
} while (tecla != 's');
cronometro.ejecutar();
return 0;
}