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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente  (Leído 5,109 veces)
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« en: 6 Marzo 2019, 09:07 am »

Buenos días, gracias de antemano por leer el post.

Me gustaría saber cómo puedo hacer que un código que tengo implementado se ejecute automáticamente cada 5 min, por ejemplo.

Muchas gracias, un saludo!


En línea

animanegra

Desconectado Desconectado

Mensajes: 287



Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #1 en: 6 Marzo 2019, 09:21 am »

Si quires ejecutar el codigo y que este sea el que ejecute la acción debes usar gettimeofday y sleep. Tomas el tiempo antes de un bucle y en el bucle compruebas si el tiempo que ha pasado han sido mas de X segundos (por ejemplo 300). Despues de eso ejecutas la acción que quieras y metes todo el proceso en un bucle infinito.

Si no quieres que se quede el programa en ejecución en windows tendrás que ponerlo en tareas programadas, o en caso de usar un linux pues en el cron.


En línea


42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #2 en: 6 Marzo 2019, 09:47 am »

Muchas gracias por responder animanegra!
Lo cierto es que soy un poco manco a la hora de programar, y creo que he entendido lo que me has escrito.

Echaré un vistazo e iré probando.
Un saludo!
En línea

animanegra

Desconectado Desconectado

Mensajes: 287



Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #3 en: 6 Marzo 2019, 10:55 am »

Escribiendo el código así sin comprobar y en c estructurado seria algo asi (no se ni si compila):

Código:

#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>

main(){

  struct timeval inicio,tiempo;

  while(1==1){

     gettimeofday(&inicio, NULL);
     gettimeofday(&tiempo, NULL);

     while(tiempo.tv_sec-inicio.tv_sec < 300){

        gettimeofday(&tiempo, NULL);

        sleep(1);

     }

     printf("imprimiendo basura cada 300 segundos!!!\n");

   }

}
En línea


42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #4 en: 6 Marzo 2019, 16:55 pm »

Escribiendo el código así sin comprobar y en c estructurado seria algo asi (no se ni si compila):

Código:

#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>

main(){

  struct timeval inicio,tiempo;

  while(1==1){

     gettimeofday(&inicio, NULL);
     gettimeofday(&tiempo, NULL);

     while(tiempo.tv_sec-inicio.tv_sec < 300){

        gettimeofday(&tiempo, NULL);

        sleep(1);

     }

     printf("imprimiendo basura cada 300 segundos!!!\n");

   }

}

Un bucle <while> infinito se puede hacer simplemente con un 1 igual que se puede hacer sólo con <true>:
Código
  1. while(1){
  2.    // cuerpo del bucle infinito
  3. }

Y la otra pregunta que me surge es... Si desde un principio sabes el tiempo que tienes que esperar ¿por qué no así?
Código
  1. while(1){
  2.    Sleep(milisegundos_a_esperar);
  3.    // lo que quieres que se repita
  4. }

Lo malo de esta forma (tanto con una implementación como con la otra) es que el programa tiene que estar siempre ejecutándose; como ya te ha comentado @animanegra, es preferible dejarlo como tarea programa usando herramientas externas al propio programa. Suerte :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #5 en: 7 Marzo 2019, 08:17 am »

Muchísimas gracias por responder!!
ya he conseguido resolver el problema, y me funciona a la perfección.

Código
  1. do{
  2.    cout << "========== C H E C K I N G - " << cont << " =========="<<endl;
  3.    entrada = "Fichero_Origen.txt";
  4.    salida = "Fichero_Destino.txt";
  5.  
  6.    traspasar_fichero(salida, entrada, ok1);
  7.    codigo_error(ok1);
  8.  
  9.    entrada = "Fichero_Destino.txt;
  10.    salida = "Datos_Actualizados.txt";
  11.  
  12.    actualizar_datos(salida, entrada, ok2);
  13.    codigo_error(ok2);
  14.  
  15.  
  16.    if(ok1 == OK_traspaso && ok2 == OK_dato){
  17.        continuo = true;
  18.    }else{
  19.        continuo = false;
  20.    }
  21.    cont++;
  22.    cout << "= = = = = = = = = = = = = = = = = = = = =" << endl;
  23.    cout << endl;
  24.    Sleep(300000);
  25.  
  26. }while(continuo = true);
  27.  

La duda que tengo ahora es si lo que tengo hecho es algo muy basto o si hay alguna mejora que podría hacerle.
¿cómo hago para dejarlo como tarea programa? en qué beneficiaría exactamente que el código no estuviese siempre ejecutándose?

Un saludo y muchas gracias!
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #6 en: 7 Marzo 2019, 13:00 pm »

Tienes un error en ese código... Si te fijas nunca vas a salir del <while> ya que no estás comparando <continuo> con <true> sino que estás asignando <true> a la variable <continuo> (ya que sólo estás usando un =). Si el propósito es ese, un bucle infinito, entonces es innecesario eso; y si el objetivo no es ese tienes que corregir esa condición...
Además te has dejado unas comillas al final de <entrada = "Fichero_Destino.txt">.

Y hombre un poco basto sí que es... Tener el programa continuamente en ejecución, primero; te está consumiendo recursos del pc y luego que podrías cerrarlo por error y perder toda la progresión. Para establecerlo como una tarea programada tienes que buscarlo según el sistema operativo (que en tu caso imagino que es Windows). Suerte :-X

Y ahora por añadir algo más te dejo otra opción para ese tipo de condicionales con una variable <bool>:
Código
  1. if(ok1 == OK_traspaso && ok2 == OK_dato){
  2.    continuo = true;
  3. }else{
  4.    continuo = false;
  5. }
  6.  
  7. // FORMA EQUIVALENTE A LA DE ARRIBA
  8. bool continuo = (ok1 == OK_traspaso && ok2 == OK_dato);
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #7 en: 8 Marzo 2019, 08:43 am »

Tienes razón, ese continuo = true está mal, claro, como me funcionaba pues ni me he fijado, y al ser también un indicativo de si el proceso ha ido bien, pues el == es lo que hay que poner. Muchas gracias!

Entonces, si recurro al programador de tareas del PC y mando que esa tarea se ejecute cada 5 min automáticamente, no sería necesario usar los comandos Sleep y demás no?

Agradezco mucho vuestras respuestas! un saludo
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #8 en: 8 Marzo 2019, 08:47 am »

No, no es necesario el <Sleep()> ya que eso lo hemos incluido ahora para mantener el programa "dormido" durante X tiempo aunque esté siempre ejecutándose. Pero si se programa cada X tiempo, entonces el programa terminará una vez y cuando pase X, volverá a ejecutarse. Suerte :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Cómo hacer para que un código de C++ se ejecute cada X tiempo automáticamente
« Respuesta #9 en: 8 Marzo 2019, 08:57 am »

Maravilloso! Muchas gracias por la ayuda que he recibido!
Que pasen un buen día! =)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines