elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ejecutar funcion en bucle cada X tiempo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejecutar funcion en bucle cada X tiempo.  (Leído 3,917 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Ejecutar funcion en bucle cada X tiempo.
« en: 13 Julio 2015, 22:00 pm »

Hola, tengo he probado a usar la función clock() pero claro, el valor de la misma es más grande cada vez, así pues tras pasar un segundo desde la primera llamada devolverá 1000, pues tras 48h, devolvería 48x60x60x1000=172.800.000 que no se si una variable podría almacenarlo un unsigned long, o si clock() sería capaz de devolverlo, pero la verdad es un valor muy grande. Lo que tengo es:

Código
  1. clock_t inicio= clock();
  2. while(true)
  3. {
  4.    if(clock()-inicio>2000)
  5.       inicio=clock();
  6.       //ejecuto esto cada 2 segundos de bucle.
  7. }

El problema es que clock() tomará valores muy grandes y puede ser peligroso para el programa, ¿no habrá una mejor forma de hacerlo?

Saludos.


« Última modificación: 13 Julio 2015, 22:14 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ejecutar funcion en bucle cada X tiempo.
« Respuesta #1 en: 13 Julio 2015, 22:14 pm »

Te da para unos 49 días.

En cualquier caso, puedes usar time(), que hasta el año 2038, te funcionará sin problema xD
Claro que tratarás con segundos, no milisegundos.

Igualmente, ¿vas a tener un programa corriendo durante 50 días? Son caso 2 meses. Sin parar. Contando milisegundos durante 2 meses, es algo bruto. Utiliza segundos, o, si insistes, reinicia el programa cada X días (automaticamente, claro)

A todo esto, es recomendable que coloques algún sleep en el bucle, ya sea Sleep() de Windows, this_thread::sleep_for() de la estandar de C++11, o como veas.


« Última modificación: 13 Julio 2015, 22:16 pm por ivancea96 » En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ejecutar funcion en bucle cada X tiempo.
« Respuesta #2 en: 13 Julio 2015, 22:25 pm »

http://www.cplusplus.com/reference/climits/

Para para, acabo de ver lo que es clock_t en la definición, y devuelve un long, no un u_long luego su máximo valor sería 2147483647, lo que daría para unas teniendo en cuenta que un día del bucle en ejecución daría lugar a un valor de 86400000.

Tendríamos como máximo 24,85 días en ejecución el bucle sin que casque el programa. Pero aún así es una vulnerabilidad, hay equipos que nunca se apagan.

Sino hay otro metodo mejor me conformare con ello, pero no me agrada como solución.

Estuve leyendo acerca de steady_clock pero creo que es igual que clock_t.

Saludos socio.
« Última modificación: 13 Julio 2015, 22:41 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ejecutar funcion en bucle cada X tiempo.
« Respuesta #3 en: 13 Julio 2015, 22:41 pm »

No creo que necesites tener sin parar un programa tanto tiempo, y haciendo comprobaciones exactas al milisegundo ._.

Si los intervalos son entre 100 y 1000 milisegundos, puedes utilizar sleep, que te dará una precisión medianamente fiable, especialmente si lo mezclas con time().

De cualquier forma, no te centres en factores que no te influyen :/
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ejecutar funcion en bucle cada X tiempo.
« Respuesta #4 en: 13 Julio 2015, 22:43 pm »

La idea es usarlo para lanzar un reescaner de hosts en la red cada X tiempo. Pero claro quemara bastante CPU y además tomará valores muy grandes, no me gusta pero es lo que tengo, de todas formas no conozco a nadie que haya tenido encendido el ordenador 24,85 días XDDD

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ejecutar funcion en bucle cada X tiempo.
« Respuesta #5 en: 13 Julio 2015, 22:47 pm »

Citar
La idea es usarlo para lanzar un reescaner de hosts en la red cada X tiempo.

time()
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ejecutar funcion en bucle cada X tiempo.
« Respuesta #6 en: 13 Julio 2015, 23:00 pm »

También lo pense, cogiendo la hora local, pero dificultaría mucho el código para obtener la diferencia de tiempos, la verdad lo estoy haciendo con clock() de todas formas lo apuntaré como posible mejora futura.

Saludos! gracias.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ejecutar funcion en bucle cada X tiempo.
« Respuesta #7 en: 13 Julio 2015, 23:54 pm »

La hora locar funciona igual que clock ._.

Código
  1. time_t inicio = time(0);
  2. while(true)
  3. {
  4.    if(time(0)-inicio>2)
  5.        inicio=clock();
  6.        //ejecuto esto cada 2 segundos de bucle.
  7. }

¿La diferencia? Que con time, además de todo lo ya dicho, también sacas datos de año, mes, día, hora, minuto y segundo, objetivamente. Si vas a hacer diferencias por segundos y no por milisegundo, y quieres dejar tu programa un mes sin parar, yo lo tendría muy claro.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejecutar un comando cada X tiempo
Hacking
ElDaxter 2 12,532 Último mensaje 27 Junio 2017, 21:44 pm
por nigan
Ejecutar .exe de VB cada 'x' tiempo.
Programación Visual Basic
swindler01 8 13,733 Último mensaje 7 Marzo 2009, 03:54 am
por Mr. Crowley
Ejecutar labels cada cierto tiempo « 1 2 »
Programación Visual Basic
El anonimato 13 7,814 Último mensaje 22 Febrero 2011, 06:18 am
por ignorantev1.1
Ejecutar programa cada X tiempo
Windows
msies 3 7,863 Último mensaje 6 Marzo 2013, 14:01 pm
por #Borracho.-
Como ejecutar una funcion cada X horas o dias [Solucionado]
PHP
peib0l 9 4,392 Último mensaje 24 Febrero 2015, 05:35 am
por alexiscruz007
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines