sábado, 27 de julho de 2013

Como adicionar um contador de tempo de funcionamento a um programa em C / C++?


Opa, eae pessoal, beleza? Aqui é o Victor! Hoje vou dar continuidade naquela minha sessão de tutoriais em C / C++! \o

Seguinte, hoje, irei ensinar como se adiciona um contador no seu programa.

(WTF?! Como assim um contador? O.O)

Ele funciona como uma espécie de cronômetro, que conta quantos ciclos de máquina o programa tomou para completar a execução do programa.

(Whatahell are you saying? e.e)

Pra quem não entende muito desses lances de hardware e suas associações com o S.O. (Sistema Operacional e.e) eu vou dar uma breve explicação.

Um ciclo de máquina caracteriza-se por um giro completo do processador.

Esse 'giro' é uma passagem por todos os componentes do processador, ou seja, todas as unidades que executam as mais diversas funções (aritméticas, lógicas, entrada e saída de dados, etc.).

Cada ciclo de máquina ganha o nome de 'clock' por ser o tempo utilizado pela máquina para executar as mais diversas funções.

Enfim, depois desta breve explicação vamos ao que realmente interessa, o tutorial! \o

Como adicionar um contador de tempo de funcionamento a um programa em C / C++?

Esse é um pouco mais complicado, devido a algumas funções que teremos de utilizar, mas, ao longo do tutorial vou desenrolar tudo.

Primeiramente, vou colocar uma imagem do código fonte de um programa que agrega esta função de contador de tempo de execução.

Código fonte do programa que agrega a função de contador de tempo de execução.

Este programa tem uma determinada finalidade, mas, com a função de contar os ciclos de máquina, você pode fazer qualquer coisa, e adaptar a qualquer programa.

Primeiro vou explicar como este programa funciona.

Este software que eu fiz, tem a seguinte finalidade: contar até 10.000 através de uma estrutura de repetição e dizer quanto tempo demorou para executar esta contagem.

Esta é uma ótima maneira de testar seu processador. É só você aumentar de 10.000 pra um número bem alto, e deixar o programa rodando, e ao fim da execução, verificar quanto tempo demorou para ele fazer a contagem. Quanto mais rápido acabar, mais rápido será seu processador (Óbvio e.e).

Agora, vou explicar a finalidade de cada biblioteca declarada.

<stdio.h> - Declarada para utilizar o 'printf()', que tem a finalidade de imprimir os resultados, somente.

<stdlib.h> - Declarada para utilizar o 'system("pause"), que tem a finalidade de parar a execução do programa, para que os resultados possam ser observados.

<time.h> - Declarada para utilizar o tipo 'clock_t', a função 'clock()' e a macro 'CLOCKS_PER_SEC', que serão explicadas, uma a uma, logo abaixo.

Finalmente, vou explicar cada parte necessária para se programar o contador.

clock_t timer - Aqui se cria uma variável de nome 'timer' do tipo 'clock_t' ou 'clock ticks', onde ela irá contar, a partir deste momento, cada ciclo de máquina utilizado pelo programa.

timer = clock() - Aqui atribui-se a função 'clock()' a variável 'timer', esta função retorna o tempo gasto pelo processador para executar o programa. O valor é retornado em 'clocks', que é a unidade de medida utilizada pela máquina, já mencionada no começo do post.

((float)timer)/CLOCKS_PER_SEC - 'Isto' pode ser divido em algumas partes para ser melhor entendido:

((float)timer) - Isto se chama 'cast', é quando você tem a necessidade de transformar um tipo primitivo em outro. No caso, transformamos a variável 'timer' de 'clock_t' para 'float', para que o resultado possa ser dividido. 
((float)timer)/CLOCKS_PER_SEC - Aqui, a variável 'timer' que agora é do tipo 'float' vai ser dividida pela macro 'CLOCKS_PER_SEC' ou seja, dividida pela quantidade de clocks que se foram por segundo, exibindo assim, o resultado em segundo(s), para que nós possamos ter uma maior dimensão de quanto tempo demorou.

Ao final de tudo, o programa deverá ficar com esta aparencia:

Acima: números contados; Abaixo: tempo de execução exibido.
 É isso aí pessoal, espero que vocês tenham gostado do meu tutorial, afinal, eu estudo e me esforço muito para não colocar informações erradas, agora, a ortografia, me perdoem, sou um reles estudante de programação, não um Ph.D. em letras! e.e

Por favor, comentem, critiquem, elogiem e, se houver alguma falha ao longo do post, apontem por favor! e.e

Um grande abraço, e um high five do seu amigo, Victor! o/


4 comentários :

  1. goste da explicação, porem tenho um outro problema.

    estou escrevendo um programa em c++, e preciso que este aguarde 30 segundos entre a execução de comandos.

    ResponderExcluir
  2. Parabéns mano, excelente sua explicação!! Grande abraço!

    ResponderExcluir
  3. Vc é foda cara, vlw aí, não achei uma explicação simples assim em nenhum outro lugar

    ResponderExcluir