FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Cuestionamiento con Hilos
Tengo un problema que no se como resolverlo por medio de Delphi, la cuestión es la siguiente:
- Supongamos que tengo una clase derivada de TThread llamada MiHilo la cual contiene varios metodos y dentro del Execute hay un loop repeat que debe estar en ejecuccion siempre durante la ejecucion del programa (ya que es un Servidor TCP y debe atender las peticiones de los clientes) - Dentro de la clase MiHilo existe un método funcion llamado MiFuncion que devuelve un cierto valor el cual se obtiene de los procesos que se realizan dentro de Execute y que son generados dadas ciertas condiciones por lo que el tiempo que tardan en generarse es variable. Si llamo MiFuncion (de un objeto instanciado de la clase MiHilo) desde el hilo principal del programa (ya sea por medio de algun evento de un boton o algo por el estilo) el programa principal no debe de continuar con las siguientes instrucciones ya que debe de tener el valor de regeso de MiFuncion. El problema aqui es como hacer que MiFuncion espere a obtener los valores generados por Execute para posteriormente regresarselos al hilo principal del programa... todo esto sin alterar la ejecucion de Execute, ya que si meto un ciclo repeat en MiFuncion para esperar la respuesta (por medio de alguna bandera para saber que Execute tiene el resultado), la respuesta de Execute nunca llegara ya que MiHilo estara atorado en MiFuncion y Execute no podria seguir ejecutandose. Que solucion podria existir a este problema??? Gracias por su tiempo. |
#2
|
||||
|
||||
Cita:
¡Este mundo está loco! Cita:
Si la función está dentro del hilo, comparte ese hilo de ejecución con el procedimiento Execute, por lo tanto, la lógica dice que al hacer la llamada a la función que está dentro del hilo esta debería esperarse a que el Execute terminara (no así el hilo principal que continuará). Segun dices, eso no es lo que te está pasando, de ahí que no acabo de comprender muy bien el problema ; Algo se me escapa....
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
Se supone que el Hilo principal de la aplicacion se va detener en una funcion hasta que ésta devuelva el resultado esperado, un ejemplo claro de esto es la funcion ShowModal de los formularios.
Siguiendo ese ejemplo, el truco que buscas seria hacer detener tu funcion (MiFuncion) hasta que el metodo Execute del hilo que creaste devuelva o resuelva el resultado que buscas(segun te entiendo); para lo cual la solucion esta en utilizar una variable dentro de tu clase Hilo (MiHilo) que indique si ya el metodo Execute resolvio el resultado esperado, para que tu funcion (MiFuncion) lo devuelva; La variable a utilizar para eso podria ser una Booleana; Un codigo ejemplo seria: Espero que se haya entendido la idea. Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Última edición por rgstuamigo fecha: 15-01-2010 a las 15:46:25. |
#4
|
||||
|
||||
Pues se ha entendido y bastante bien.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Gracias por tu tiempo, tu respuesta me parece muy clara, ahora mi duda sobre tu código es la siguiente:
1.- Si ejecuto externamente MiFuncion (desde otro hilo), MiFuncion al entrar en un bucle while, frenara la ejecucion de Execute hasta terminar el bucle? 2.- Si el propio Execute llama a MiFuncion , entonces si habria un freno a Execute, no??? , ahi es donde encuentro el problema porque Execute no generara las condiciones para salir del bucle. 2.- El ejecutar una funcion externamente de un Hilo hace que se ejecute en el hilo que la llama o en el hilo al que pertenece? |
#6
|
||||
|
||||
Cita:
Cita:
Cita:
Espero se haya entendido. Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Última edición por rgstuamigo fecha: 15-01-2010 a las 20:05:15. |
#7
|
||||
|
||||
Cita:
Cita:
Hace que se ejecute en el hilo que la llama, por lo que el hilo al que pertenece sigue trabajando sin verse afectado (podría verse afectado, si manipulases variables de dicha clase desde esa función).
__________________
"La recompensa de una buena acción está en haberla hecho" |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con hilos | zajoma | OOP | 4 | 13-04-2009 16:48:15 |
Los hilos se destruyen?? | dtomeysoto | Varios | 1 | 13-03-2009 22:00:14 |
Hilos | johurgi | Varios | 2 | 16-07-2007 10:57:08 |
ver hilos | Cosgaya | Varios | 1 | 07-06-2005 20:35:16 |
Hilos con COM | urush30 | Varios | 0 | 21-09-2004 10:07:37 |
|