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 |
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 :D).
¿Puedes mostrarnos algo de código?.. |
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 |
Que tipo de lista es monitres ???...
Si un thread termina inesperadamente antes de TForm1.Logout, es quitado de esta lista?? |
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.
:confused: ¿Acerte? |
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 |
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. |
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. |
La franja horaria es GMT +2. Ahora son las 01:56:56. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi