Contador de segundos en C

Iniciado por soser, 1 Octubre 2010, 03:52 AM

0 Miembros y 1 Visitante están viendo este tema.

soser

Buenas, pues ando haciendo un programa que ejecuta ciertas condiciones, pero quiero que esas condiciones se ejecuten por algunos segundos y en si el problema que tengo es que no se como hacer un segundero, he estado buscando y pues solo encuentro informacion de obtener la hora actual, asi que podrian decirme como se hace o darme alguna información que me sea util acerca de segunderos en C.

[L]ord [R]NA

Puedes tomar la fecha actual y guardarla, despues tomas otra fecha actual y verificas.

cbug

Un ejemplo en linux:


#include <stdio.h>

int main()
{
int cnt;
for(cnt = 1; cnt <= 10; cnt++){
printf("\n %d Segundos \n", cnt);
sleep(1);
}  
return 0;
}


Bajo windows, creo que existe GetTickCount(...)... o algo parecido...

[L]ord [R]NA

En windows si no me equivoco tambien existe sleep();

soser

Gracias a ambos, me han servido de mucho las dos ideas...

ace332

el problema con sleep(1) es que durante ese segundo aparte de esperar no se hace nada.

Otra forma de hacerlo usando la función clock():

#include <stdio.h>
#include <time.h>

int main(void)
{
 clock_t t,ts;
 int segundos=0;
 ts=clock()+CLOCKS_PER_SEC;
 for(;;)
 {
   /* hacer otras cosas */

   /* verificar si ya pasó un segundo */
   if((t=clock())>=ts)
   {
     printf("%d\n",++segundos);
     ts=t+CLOCKS_PER_SEC;
   }
 }
 return 0;
}

Saludos

Horricreu

#6
sleep() no es estándar. ¿Seguro que no te da errores de compilación?

Saludos :P

[L]ord [R]NA

Estas en lo correcto... para que funcione sleep necesita ser incluida la cabecera 'unistd.h'

#include <unistd.h>
unsigned int sleep(unsigned int seconds);


Para mas informacion consultar en man en Linux pagina 3.

cbug

Ja, sinceramente estoy algo cansado de ver el comentario "esto o aquello no es standar"... que quede a gusto y piacere de quien haga el código, si quiere hacerlo portable o no...

soser

Me agrada que respondan y de una u otra forma sus comentarios me ayudan a entenderle más, gracias por sus comentarios ;D