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

Multitarea en C++

Estas en el tema de Multitarea en C++ en el foro de C/C++ en Foros del Web. Seguro que lo que voy a preguntar está en google, pero es que no se cómo buscarlo. Bien mi problema es el siguiente: 1 - ...
  #1 (permalink)  
Antiguo 02/06/2007, 09:29
 
Fecha de Ingreso: junio-2007
Mensajes: 4
Antigüedad: 16 años, 11 meses
Puntos: 0
Multitarea en C++

Seguro que lo que voy a preguntar está en google, pero es que no se cómo buscarlo. Bien mi problema es el siguiente:

1 - Tengo un botón en GTK+ (a través de la interfaz gtkmm) que al que le he conectado dos señales, una cuando se pulsa y otra cuando se libera.

2 - Cuando se pulse el botón, quiero, desde un archivo de texto que ya tengo cargado en memoria, que se muestre un línea, espere unos segundos y muestra la siguiente y así sucesivamente en un Label.

3 - Cuando se libere el botón quiero que se cesen de mostrar las líneas.

Sería algo así como:

Código:
bool ciertaVariable;

void botonPulsado()
{
  ciertaVariable = true;
  while (ciertaVariable)
  {
       label.set_text(siguienteLinea());
       sleep(1);
   }
}

void botonLiberado()
{
  ciertaVariable = false;
}
El problema de este código es que entra en un bucle infinito y la señal del botón liberado no llega adecuadamente a la función que lo maneja, botonLiberado.

¿Alguien sabe cómo hacer que se ejecute el bucle, pero que no frene la ejecución del programa?

Un saludo.

P.D.: Espero haberme explicado bien....
  #2 (permalink)  
Antiguo 02/06/2007, 11:12
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Multitarea en C++

Podes usar hilos (threads).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 02/06/2007, 11:26
 
Fecha de Ingreso: junio-2007
Mensajes: 4
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Multitarea en C++

¿Threads? No se muy bien lo que son, pero bueno intentaré usarlos. ¿Sabes de algún buen manual en Internet? Muchas gracias por tu respuesta.

Un saludo
  #4 (permalink)  
Antiguo 02/06/2007, 11:30
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Multitarea en C++

Fijate en la seccion de enlaces externos de http://en.wikipedia.org/wiki/POSIX_Threads
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 02/06/2007, 12:00
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Multitarea en C++

También puedes usar la librería ACE, tienen clases para trabajar con múltiples hilos, mutex, semáforos entre otras cosas (comunicaciones, IPC, etc). Son un poco mas sencillas de usar para lo que buscas.

En tu caso usaría la clase ACE_Task_Base para crear un par de tareas que se encarguen de lo que mencionas, aunque si no piensas meterte mucho con la parte de programación multi hilo quizás no valga la pena aprender a usarlas y lo hagas usando las funciones estándar de las librerias de Linux. El detalle es que toda la documentación está en inglés.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #6 (permalink)  
Antiguo 02/06/2007, 13:13
 
Fecha de Ingreso: junio-2007
Mensajes: 4
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Multitarea en C++

Muchas gracias a los dos por vuestras ideas. La idea de los threads tengo que examinarla un poco más a fondo, pero a primera vista creo que me convence más la librería ACE.

Esto no es por ninguna razón de odio o de no querer meterme muy a fondo con los threads, el problemas es que los threads por lo que veo esá restringido a los sistemas POSIX, la intención que tengo al escribir el código es que sea tan portable como lo sea el propio C++. Mientras escribo el código me fijo especialmente que al compilar no me arroje ningún Warning, no uso métodos exclusivos de ningún compilador y, sobre todo, nunca uso librerías que no tengan gran portabilidad a otros sistemas. Por eso elegí la librerías GTK para las interfaces, que es altamente portable, que puede ser usado con una grandísma variedad de compiladores, aunque yo sólo use el gcc (g++), quiero que se pueda comilar con el compilador preferido de cada uno, que además se use en multitud de entornos o sistemas operativos (que yo sepa seguro MacOS, Widnows, Linux, Solaris, BSD y un largo etc.) Es por eso por lo que la elección de hacer mi desarrollo sobre threads inicialmente me produce un poco de rechazo.

Bueno miraré a fondo las dos opicones, veré cual es más fácil de implementar y, sobre todo, cual es la opción que más portabilidad me ofrece.

Un saludo a ambos y muchísmas gracias por vuestras respuestas.
  #7 (permalink)  
Antiguo 02/06/2007, 13:20
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Multitarea en C++

En realidad es lo mismo solo que pones una capa mas por encima, esa libreria se encargara de usar las funciones de bajo nivel de threads. Si te es util en el sentido de portabilidad pero no es que deje de usar threads ni mucho menos.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 15:51.