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

Correr proceso de fondo

Estas en el tema de Correr proceso de fondo en el foro de C/C++ en Foros del Web. Hola, Tengo una lista enlazada que se procesa en 3 "ventanillas" (como un banco). Me piden hacer que el elemento espere unos segundos en la ...
  #1 (permalink)  
Antiguo 06/04/2016, 00:24
 
Fecha de Ingreso: marzo-2014
Mensajes: 41
Antigüedad: 10 años, 2 meses
Puntos: 0
Correr proceso de fondo

Hola,
Tengo una lista enlazada que se procesa en 3 "ventanillas" (como un banco).
Me piden hacer que el elemento espere unos segundos en la ventanilla y si el usuario no se reporta se devuelve al final de la lista.

El problema que veo es que no se como hacer para que mientras estoy en una parte del programa distinta a la de ventanillas, agregando elementos a la lista para ser procesados por ejemplo, el metodo de ventanillas corra de fondo y este esperando 20seg en la ventanilla en caso de que el usuario se "reporte"?
  #2 (permalink)  
Antiguo 06/04/2016, 01:17
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Correr proceso de fondo

Puedes programarlo directamente con hilos, de tal forma que cada hilo gestiona una ventanilla. Esta es la opción más compleja.

La otra opción pasa por "simular" los hilos. La idea es tener un bucle principal y el bucle "escucha" las tres ventanillas (primero una, después otra y luego la última y vuelta a empezar). La gracia es conseguir que las "escuchas" no sean bloqueantes, es decir, tienes que consultar si hay datos pendientes en dicha ventanilla. Si los hay los atiendes y si no pasas directamente a la siguiente ventanilla.

Para que el invento funcione necesitas un contador individual para cada ventanilla, de tal forma que si la ventanilla en cuestión no tiene datos pendientes y ya han pasado los 20 segundos de espera se mande al usuario al final de la fila.

No has indicado cómo están representadas esas filas (interfaz gráfica, de consola, sockets, ...) por lo que poco más se puede decir al respecto.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 06/04/2016, 08:06
 
Fecha de Ingreso: marzo-2014
Mensajes: 41
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Correr proceso de fondo

Gracias por responder es en consola sin nada especial.
Se me acaba de ocurrir hacerlo por la hora actual, por ejemplo, cuando agrego los datos a la lista les pongo un atributo con la hora, cuando el usuario ingresa a la seccion de ventanillas el metodo procesa 3 datos que tenga menos de 20seg... Ahi mismo todos los que tengan mas tiempo se les asigna una nueva hora.
De esta forma no necesito threads
Suena bien? O les parece que me complicaria?
  #4 (permalink)  
Antiguo 06/04/2016, 08:50
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Correr proceso de fondo

Depende también de los requisitos a cumplir por parte de la práctica.

Sobre si es una solución fácil o dificil, la respuesta depende enormemente de la forma en la que organices el código.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #5 (permalink)  
Antiguo 06/04/2016, 09:06
 
Fecha de Ingreso: marzo-2014
Mensajes: 41
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Correr proceso de fondo

Aun no he visto threads en clase, por lo que supongo que no sera requisito, de todas formas no lo especifica.

Una pregunta, como hago para obtener el tiempo actual? ya vi que puedo obtener los segundos con time(0) y eso me funcionara para lo que tengo planeado, pero tambien tengo que registrar la hora de recepcion en "X" ventanilla, he visto ejemplos con t_time pero me parece que solo funciona en el main porque en otra clase no me da ningun metodo a utilizar con ese atributo... Entonces lo que me queda es usar el mismo time(0), la pregunta ahora es, desde que fecha es ese time 0? para realizar una resta y obtener hora y minutos
  #6 (permalink)  
Antiguo 06/04/2016, 09:30
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Correr proceso de fondo

Para ello puedes usar la función de <ctime> localtime que mete en un puntero a una structura tm (que sirve para almacenar los datos de la fecha en formatos más humanamente accesibles) la fecha actual. Por regla general time mide el tiempo que ha pasado desde el 1 de enero de 1970 a las 00:00 (UTC) pero no está garantizado que ocurra.

Aquí tienes la documentación de localtime (en inglés)
http://www.cplusplus.com/reference/ctime/localtime/

Aqui tienes la documentación de la estructura tm (en inglés)
http://www.cplusplus.com/reference/ctime/tm/
  #7 (permalink)  
Antiguo 06/04/2016, 10:29
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Correr proceso de fondo

No dice nada de si tiene que ser un solo proceso o no asi que otra opcion seria crear un proceso para cada ventana y memoria compartida o sockets para comunicarse entre procesos. A uno lo pones a controlar el tiempo y cuando se pase avisas en la otra ventana o la cierras o lo que quieras.

Etiquetas: background, c++, listas, threads
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 18:06.