FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
uso del WaitFor() en Threads
Hola como andan.
al llamar a WaitFor sobre un thread me lanza la excepción EThread con el siguiente mensaje... Thread Error: Controlador no válido (6). Alguien sabe que quiere decir con eso, o una página donde se documente bien esta excepción. ¿Por que las excepciones en Delphi estan tan poco documentadas? Muchas gracias, saludos Ramiro |
#2
|
||||
|
||||
Fíjate que el mensaje es en español, lo me hace sospechar que se trata de un error del sistema operativo (Ademas de ser un error conocido y detestado ).
¿Puedes mostrarnos algo de código?..
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
Este el codigo que ejecuto...
Vale aclarar que el "Terminate := True" lo hace el mismo TMonitor dentro del Execute cuando consulta el estado y se da cuenta de que tiene que terminar. Gracias de ante mano, saludos Ramiro |
#4
|
||||
|
||||
Que tipo de lista es monitres ???...
Si un thread termina inesperadamente antes de TForm1.Logout, es quitado de esta lista??
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
||||
|
||||
Déjeme adivinar, tienes la propiedad FreeOnTerminate del Thread a TRUE. Si es así, cuando finaliza el thread el objeto es destruido, por eso al llamar a WaitFor te da ese error.
¿Acerte? |
#6
|
|||
|
|||
Antes que nada... perdon por borrame 6 dias y hola.
Cita:
Código Delphi [-] // Detener todos los monitores for i:=0 to count-1 do begin monitor := TMonitor(self.monitres.Items[0]); //ACA lo elimino de la lista monitres.Delete(0); // FinalizarMonitoreo lo que hace es cambiar el estado interno // del monitor para que termine su ejecucion lo mas rapido // posible, y como notifica muchos eventos // por ej: // Detenido // Desconectado // es que debo esperarlo, porque se puede dar que se termine // cerrar el Form y el thread no termino de cerrarse... y asi // con c/u de los monitores monitor.FinalizarMonitoreo; r := monitor.WaitFor; end; lo hago antes porque tengo decidido destruir monitor. seoane... vos decis que si llamo al WaitFor y el thread esta Terminated explota! Gracias por el tiempo, ya me pongo otra vez con eso... espero traeles buenas nuevas. Ramiro |
#7
|
||||
|
||||
Cita:
Si la propiedad FreeOnTerminate esta a true, pasaría lo siguiente. Con "FinalizarMonitoreo" mandas finalizar el thread, el thread finaliza, el objeto Thread se destruye y la llamada a WaitFor "explota" como dices tu. Pero insisto, si no tienes la propiedad FreeOnTerminate a TRUE, todo lo anterior no es la explicación a tu problema, y tendrás que buscar la causa en otro sitio. |
#8
|
||||
|
||||
Cita:
Cita:
Ademas, aparentemente no estas escribiendo código Thread-Safe, porque el mismo item de la lista puede estar siendo eliminado por tu procedimiento TForm1.Logout o el mismo Thread.
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Indy y Threads | PeLuCa | Internet | 20 | 13-01-2011 00:42:21 |
Firebird AND Threads | Abel Garcia | Firebird e Interbase | 21 | 19-03-2008 05:07:21 |
Threads y transacciones | anduj | Conexión con bases de datos | 5 | 12-07-2005 20:31:40 |
Threads sobre Componentes | NeWNeO | Varios | 6 | 05-07-2004 15:43:17 |
Manejo de threads en Delphi | dmasson | Varios | 3 | 16-04-2004 15:22:58 |
|