Ir ao conteúdo
  • Cadastre-se

Função Reiniciar, cronometro C++


Posts recomendados

Galera, bom dia!

Estou fazendo um projeto pra faculdade ele pede um cronometro com as funções "Iniciar", "Pausar" e "Reinicar"

já conseguir fazer as duas  funções, Pausar e Reiniciar mas na Iniciar estou apanhando, ele pede para que a função Iniciar continue o tempo da onde parou, caso tenha um time em andamento, como proceder? Alguém me dar uma luz?

 

Obs, isto é em orientação a objetos

 

 

Agradeço.

Link para o comentário
Compartilhar em outros sites

@EmersonFerreiraBjj vou presumir que você está usando a biblioteca std::chrono.

Armazene o time_point ao iniciar e só limpe-o quando você quiser reiniciar.

#include <iostream>
#include <thread>
#include <chrono>

using std::chrono::steady_clock;
using std::chrono::time_point;
using std::chrono::duration;
using std::chrono::duration_cast;
using namespace std::literals::chrono_literals;

class timer
{
public:
	void start() {
		started_in = steady_clock::now();
	}

	void stop() { 
		stopped_in = steady_clock::now();
	}

	// tempo decorrido desde o inicio do timer ao tempo da chamada deste método
	std::chrono::nanoseconds get_time_lapsed() const {
		return (steady_clock::now() - started_in);
	}

	// tempo decorrido desde o inicio do timer ao tempo da chamada do método 'stop'
	std::chrono::nanoseconds get_timer_interval() const {
		return(stopped_in - started_in);
	}

	// reseta o timer
	void reset()
	{
		started_in = time_point<steady_clock>();
		stopped_in = time_point<steady_clock>();
	}

	timer() {}
protected:
	time_point<steady_clock> started_in;
	time_point<steady_clock> stopped_in;
};

int main()
{
	timer test;
	test.start();
	std::this_thread::sleep_for(100ms);
	test.stop();

	std::cout << ((double)test.get_time_lapsed().count() / 1000000) << "ms" << std::endl;

	std::this_thread::sleep_for(300ms);
	test.stop();

	std::cout << ((double)test.get_time_lapsed().count() / 1000000) << "ms" << std::endl;

	test.reset();
	test.start();

	std::this_thread::sleep_for(1000ms);
	test.stop();
	std::cout << ((double)test.get_time_lapsed().count() / 1000000) << "ms" << std::endl;

	return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, Gustavo Andretto disse:

@EmersonFerreiraBjj vou presumir que você está usando a biblioteca std::chrono.

Armazene o time_point ao iniciar e só limpe-o quando você quiser reiniciar.


#include <iostream>
#include <thread>
#include <chrono>

using std::chrono::steady_clock;
using std::chrono::time_point;
using std::chrono::duration;
using std::chrono::duration_cast;
using namespace std::literals::chrono_literals;

class timer
{
public:
	void start() {
		started_in = steady_clock::now();
	}

	void stop() { 
		stopped_in = steady_clock::now();
	}

	// tempo decorrido desde o inicio do timer ao tempo da chamada deste método
	std::chrono::nanoseconds get_time_lapsed() const {
		return (steady_clock::now() - started_in);
	}

	// tempo decorrido desde o inicio do timer ao tempo da chamada do método 'stop'
	std::chrono::nanoseconds get_timer_interval() const {
		return(stopped_in - started_in);
	}

	// reseta o timer
	void reset()
	{
		started_in = time_point<steady_clock>();
		stopped_in = time_point<steady_clock>();
	}

	timer() {}
protected:
	time_point<steady_clock> started_in;
	time_point<steady_clock> stopped_in;
};

int main()
{
	timer test;
	test.start();
	std::this_thread::sleep_for(100ms);
	test.stop();

	std::cout << ((double)test.get_time_lapsed().count() / 1000000) << "ms" << std::endl;

	std::this_thread::sleep_for(300ms);
	test.stop();

	std::cout << ((double)test.get_time_lapsed().count() / 1000000) << "ms" << std::endl;

	test.reset();
	test.start();

	std::this_thread::sleep_for(1000ms);
	test.stop();
	std::cout << ((double)test.get_time_lapsed().count() / 1000000) << "ms" << std::endl;

	return 0;
}

 

Negão, funcionou perfeitamente, valeu mesmo! 

Abraços.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...