Foros del Web » Programación para mayores de 30 ;) » C/C++ »

llamar a una funcion cada x segundos y return donde estaba

Estas en el tema de llamar a una funcion cada x segundos y return donde estaba en el foro de C/C++ en Foros del Web. Hola, me gustaria saber como puedo llamar a una funcion cada 60 segundos mientras el programa hace otras cosas y volver a la posicion donde ...
  #1 (permalink)  
Antiguo 14/10/2010, 09:31
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 1
llamar a una funcion cada x segundos y return donde estaba

Hola,
me gustaria saber como puedo llamar a una funcion cada 60 segundos mientras el programa hace otras cosas y volver a la posicion donde se encontraba antes de llamar a esa funcion.

Ejemplo:

segundo 1: estoy calculando
segundo 60: llamada a funcion
segundo 61: volver y seguir calculando.

GRacias.
  #2 (permalink)  
Antiguo 15/10/2010, 15:24
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: llamar a una funcion cada x segundos y return donde estaba

lo que necesitas son hilos (Threads), documentate sobre el tema haber si eso te sirve.

Salu2!!
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #3 (permalink)  
Antiguo 19/10/2010, 08:37
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 9
Respuesta: llamar a una funcion cada x segundos y return donde estaba

Bueno lo primero que necesitas es saber como utilizar le llamada al sistema fork() para crear procesos hijos, y lo segundo es un temporizador, esto lo puedes hacer ayudandote de la señal SIGALRM, aqui te pongo un ejemplo muy sencillo de como hacer estas cosas.

Código c:
Ver original
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/types.h>
  5. #include <signal.h>
  6.  
  7.  
  8. int ppid;
  9.  
  10.  
  11.  
  12. void funcionSenial(int sig);
  13.  
  14. int main(){
  15.   ppid = getpid();
  16.   int pid;
  17.   char opcion;
  18.   signal(SIGALRM, funcionSenial);
  19.   if((pid = fork()) == -1)//Trantando de crear proceso hijo
  20.     return 1;
  21.   if(pid == 0){
  22.     /*Proceso del hijo*/
  23.     printf("PROCESO HIJO CON PID: %i\n", getpid());
  24.     alarm(1);
  25.     while(1);
  26.   }
  27.   else{
  28.     /*Proceso padre*/
  29.     printf("PROCESO PADRE CON PID: %i\n", getpid());
  30.     do{
  31.       printf("Desea Salir[S/N]? ");
  32.       scanf("%c", &opcion);
  33.       while(getchar() != '\n');
  34.     }while(opcion != 'S');
  35.     kill(pid, 9);
  36.   }
  37.   return 0;
  38. }
  39.  
  40.  
  41. void funcionSenial(int sig){
  42.   static int contador;
  43.   contador++;
  44.   printf("contador: %i\n", contador);
  45.   if(contador == 5){
  46.     printf("Imprime esto cada 5 segs\n");
  47.     contador = (contador + 1) % 6;
  48.   }
  49.   alarm(1);
  50. }


Rapidamente te explico un poco, fork() como habia dicho, es una llamada al sistema que crea un proceso hijo a partir del proceso que lo llama, esta funcion devuelve un pid_t (que puedes almacenar en un entero pero siempre es mejor usar el tipo pid_t), 0 o -1. En esta caso almaceno esto en la variable pid. Al crear el proceso hijo, a ambos procesos (padre e hijo) se les devuelve un valor distinto, por lo que la variable pid del hijo recive el valor de 0 y la variable pid del padre recive el ProcessID del hijo, tambien puedes recibir un mensaje valor -1 si no se pudo crear el hijo. Es por eso que hago lo siguiente:

Código c:
Ver original
  1. pid = fork();
  2.    if(pid == -1)   //SI NO SE PUDO CREAR HIJO; SALIMOS DEL PROGRAMA
  3.       return 1;
  4.    if(pid == 0){   //SI ERES EL HIJO
  5.       /*Aqui el codigo del hijo*/
  6.    }
  7.    else{   //SI NO, ENTONCES ERES EL PADRE
  8.        /*Aqui el codigo del padre*/
  9.    }
Espero haberte ayudado, cualquier dude me la haces saber

Saludos++
  #4 (permalink)  
Antiguo 19/10/2010, 14:32
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: llamar a una funcion cada x segundos y return donde estaba

Me parece que con la senal alarma de alcanza para hacer lo que dice. No es necesario crear varios procesos. Despues tendra que comunicarlos para obtener los resultados.
  #5 (permalink)  
Antiguo 19/10/2010, 20:10
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 14 años, 1 mes
Puntos: 9
Respuesta: llamar a una funcion cada x segundos y return donde estaba

haha cierto, crei que alarm() era parecido a sleep, pero no, bueno aqui un ejemplo sin el fork(), claro nunca esta de mas aprender a crear procesos hijos xd.

Código c:
Ver original
  1. #include <sys/types.h>
  2. #include <signal.h>
  3.  
  4.  
  5.  
  6. void funcionSenial(int sig);
  7.  
  8. int main(){
  9.     char opcion;
  10.     alarm(5);
  11.     signal(SIGALRM, funcionSenial);
  12.     printf("Desea Salir?[S/N]: ");
  13.     scanf(" %c", &opcion);
  14.     while(opcion != 'S'){
  15.         printf("Desea Salir?[S/N]: ");
  16.         scanf(" %c", &opcion);
  17.     }
  18.     return 0;
  19. }
  20.  
  21.  
  22. void funcionSenial(int sig){
  23.     printf("Imprime esto cada 5 segs\n");
  24.     alarm(5);
  25. }

Etiquetas: call, funcion, function, llamada, time
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:15.