Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: soser en 1 Octubre 2010, 03:52 am



Título: Contador de segundos en C
Publicado por: soser en 1 Octubre 2010, 03:52 am
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.


Título: Re: Contador de segundos en C
Publicado por: [L]ord [R]NA en 1 Octubre 2010, 03:59 am
Puedes tomar la fecha actual y guardarla, despues tomas otra fecha actual y verificas.


Título: Re: Contador de segundos en C
Publicado por: cbug en 1 Octubre 2010, 04:08 am
Un ejemplo en linux:


Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int cnt;
  6. for(cnt = 1; cnt <= 10; cnt++){
  7. printf("\n %d Segundos \n", cnt);
  8. sleep(1);
  9. }  
  10. return 0;
  11. }

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


Título: Re: Contador de segundos en C
Publicado por: [L]ord [R]NA en 1 Octubre 2010, 04:21 am
En windows si no me equivoco tambien existe sleep();


Título: Re: Contador de segundos en C
Publicado por: soser en 1 Octubre 2010, 06:52 am
Gracias a ambos, me han servido de mucho las dos ideas...


Título: Re: Contador de segundos en C
Publicado por: ace332 en 1 Octubre 2010, 19:05 pm
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():
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. int main(void)
  5. {
  6.  clock_t t,ts;
  7.  int segundos=0;
  8.  ts=clock()+CLOCKS_PER_SEC;
  9.  for(;;)
  10.  {
  11.    /* hacer otras cosas */
  12.  
  13.    /* verificar si ya pasó un segundo */
  14.    if((t=clock())>=ts)
  15.    {
  16.      printf("%d\n",++segundos);
  17.      ts=t+CLOCKS_PER_SEC;
  18.    }
  19.  }
  20.  return 0;
  21. }
  22.  
Saludos


Título: Re: Contador de segundos en C
Publicado por: Horricreu en 1 Octubre 2010, 22:02 pm
sleep() no es estándar. ¿Seguro que no te da errores de compilación?

Saludos :P


Título: Re: Contador de segundos en C
Publicado por: [L]ord [R]NA en 1 Octubre 2010, 22:13 pm
Estas en lo correcto... para que funcione sleep necesita ser incluida la cabecera 'unistd.h'

Código
  1. #include <unistd.h>
  2. unsigned int sleep(unsigned int seconds);

Para mas informacion consultar en man en Linux pagina 3.


Título: Re: Contador de segundos en C
Publicado por: cbug en 2 Octubre 2010, 03:16 am
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...


Título: Re: Contador de segundos en C
Publicado por: soser en 2 Octubre 2010, 05:05 am
Me agrada que respondan y de una u otra forma sus comentarios me ayudan a entenderle más, gracias por sus comentarios ;D


Título: Re: Contador de segundos en C
Publicado por: Eternal Idol en 2 Octubre 2010, 11:52 am
sleep no existe en Windows, Sleep si y toma como parametro milisegundos, GetTickCount existe pero solo devuelve el numero de milisegundos trasncurridos desde que arranco el sistema.

Recordarles que usen funciones standard es un consejo muy util, alguna vez cuando tengan suficiente experiencia lo valoraran en su justa medida.


Título: Re: Contador de segundos en C
Publicado por: Littlehorse en 3 Octubre 2010, 02:29 am
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...


Si alguien esta utilizando, por ejemplo, la API de Windows para hacer X tarea especifica del sistema, nadie va a decir "No uses tal función, no es estándar" porque precisamente se decidió en un principio utilizar una API en particular.
Ahora bien, si alguien por ejemplo decide usar getch para hacer una pausa habiendo 700 maneras de hacerlo en forma estándar, no remarcar ese error es contraproducente para alguien que esta aprendiendo.

A lo que voy, no siempre queda a "gusto y piacere" de quien hace el código ya que quien lo hace puede, como mínimo desconocer el concepto de portabilidad.

Ahora bien, la portabilidad es solo un tema menor de tantos otros, el programador puede decidir desarrollar exclusivamente para un solo sistema operativo, pero igualmente hay un estándar al cual hay que atenerse lo mas que se pueda siempre que sea posible, porque es eso lo que logra la consistencia en la aplicacion final, y eso en la vida real, estando en un grupo de trabajo, es fundamental.

En conclusión, cuando explicamos u recordamos que hay un estándar, no lo decimos por decir. Ya lo ha dicho Eternal Idol, a la larga se valora, y eso sucede tal cual.

Saludos