Ir ao conteúdo
  • Cadastre-se

Como fazer um relógio em tempo real em C?


ivanmax

Posts recomendados

Como eu crio um comando para fazer com que os minutos e segundos sejam incrementados em 1?

Estou criando um programa com senha de usuário e queria deixar um menu com Data e Hora que atualizam automaticamente.
Esse é um trabalho que vai me ajudar no Instituto

E nisso não estou conseguindo, alguém poderia me ajudar????

Link para o comentário
Compartilhar em outros sites

Bem simples, porém não é muito preciso, eu usaria o Sleep(int ms), dentro de um loop e com uma class que armazena os valores do tempo, e possui as funções de incrementar, etc.... Para personalizar, seria bom um thread contando o tempo no Background, enquanto o usuário possa alterar o relogio, e voltar a ver o relogio sem erros após a alteração.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Você cria um loop (for, while, do-while) e dentro vai ter (ou chamar) a função que imprime a hora, a cada loop você incrementa 1 nos segundos usando Sleep(1000) da biblioteca time.h se não me engano. O relógio não vai ser 100% preciso devido ao tempo de execução de cada comando, mas creio que demoraria muito para dar a diferença de 1 mero segundo.

O problema é que usando assim só vai ter o relógio, não tem a possibilidade de o usuário inserir valores (senha).

Para resolver isso teria que usar threads, que eu não sei explicar.

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

  • 3 meses depois...
#include <iostream>
#include <winsock.h>
using namespace std;

typedef class Relogio {
	private:
		bool ativo;
		int segundos;//0.60
		int min;//0.60
		int hora;
    public:
    	/* Prototipo vazio */
		Relogio(): segundos(0), ativo(false){
		}
		/* Prototipo que ja inicializa */
    	Relogio(int seg){
    		iniciar(seg);
		}
		
		/* Adiciona ciclo de segundo */
		void ciclo(){
			if(!ativo){
				cout << "Relogio inativo!" << endl;
				return;
			}
			
			if(segundos+1 >= 60){
				segundos=0;
				min++;
			}
			else segundos+=1;
			
			if(min >= 60){
				segundos = 0;
				min = 0;
				hora++;
			}
			
		}
		
    	/* Inicia em 'seg' */
    	void iniciar(int seg){
			segundos = seg;
			ativo = true;
		}
		
    	/* Reseta 'seg' e pausa */
		void parar(){
			segundos = 0;
			ativo = false;
		}
		
    	/* ... */
		void pausar(){
			ativo = !ativo;
		}
		
		/* Imprimir o relogio */
		void mostrar(){
			cout << "Timer: "<< hora << 
					":"		 << min << 
					":" 	 << segundos << endl;
		}

}Relogio;

int main(){
	Relogio *rel = new Relogio(0);
	while(1){
		system("cls");
		rel->ciclo();
		rel->mostrar();
		Sleep(1000);
	}
}

Nenhum mistério quanto a isso. 

P.S: Sem threads, você só poderá manipular o relógio, nada mais.

Link para o comentário
Compartilhar em outros sites

Eu tinha feito algo parecido em c++ só que usei as funções da  biblioteca <ctime>

 

Lembrando que você pode formatar a saída do strftime, tipo colocar segunda-fera no lugar de seg, 2017 no lugar de 17 etc etc.

 

http://www.cplusplus.com/reference/ctime/strftime/

 

#include <iostream>
#include <windows.h> // Funcao Sleep()
#include <cstdlib>
#include <ctime>
#include <clocale>

int main()
{
    time_t rawTime;
    struct tm * relogio;
    char a[100];


    while(1)
    {
        system("cls");

        setlocale(LC_ALL, "Portuguese");
        rawTime = time(NULL);
        relogio = localtime(&rawTime);
        strftime(a, 100, "%I:%M:%S", relogio);

        std::cout << a << std::endl;

        strftime(a, 100, "%a %d %b %y", relogio);

        std::cout << a;
        Sleep(1000);
    }
    return 0;
}

 

  • Curtir 1
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...