Autor
|
Tema: Ejecutar funcion en bucle cada X tiempo. (Leído 3,917 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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: clock_t inicio= clock(); while(true) { if(clock()-inicio>2000) inicio=clock(); //ejecuto esto cada 2 segundos de bucle. }
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 702
The man in the Middle
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 702
The man in the Middle
|
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
Mensajes: 3.412
ASMático
|
La idea es usarlo para lanzar un reescaner de hosts en la red cada X tiempo. time()
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
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
Mensajes: 3.412
ASMático
|
La hora locar funciona igual que clock ._. time_t inicio = time(0); while(true) { if(time(0)-inicio>2) inicio=clock(); //ejecuto esto cada 2 segundos de bucle. }
¿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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ejecutar un comando cada X tiempo
Hacking
|
ElDaxter
|
2
|
12,532
|
27 Junio 2017, 21:44 pm
por nigan
|
|
|
Ejecutar .exe de VB cada 'x' tiempo.
Programación Visual Basic
|
swindler01
|
8
|
13,733
|
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
|
22 Febrero 2011, 06:18 am
por ignorantev1.1
|
|
|
Ejecutar programa cada X tiempo
Windows
|
msies
|
3
|
7,863
|
6 Marzo 2013, 14:01 pm
por #Borracho.-
|
|
|
Como ejecutar una funcion cada X horas o dias [Solucionado]
PHP
|
peib0l
|
9
|
4,392
|
24 Febrero 2015, 05:35 am
por alexiscruz007
|
|