luiggixD, Perdona pero no me parece inconsistente, de hecho lo utilizo para esperar a la terminación de un thread en un programa que estoy escribiendo y que debe esperar, solo que no uso WaitForSingleObject, que congela toda la aplicación, sino el sistema que he descrito. Es posible que no me explicase bien, de forma que amplio un poco tu código de ejemplo añadiendo mi idea:
Código:
void __fastcall TUnThread::Execute()
{
Treminado = false; // Variable que añadimos como miembro a TUnThread
//algun codigo si es q lo necesitas
while(!Terminated) // agregas mas casos en los que puede terminar tu hilo
{
//codigo de lo que hace tu hilo
}
//si necesitas que se haga algo mas antes que el hilo termine
Terminado = true; // Variable que añadimos como miembro a TUnThread
}
En la aplicación Codigo de espera a la terminación del thread:
Código:
Form1::Funcion(){
// Creamos el Thread y comienza la ejecución
.
.
.
// Ahora necesito esperar....
for(;!TUnThread->Terminado;){
Application->ProcessMessages(); // Permite procesar mensajes y evitar la "congelación total" de la aplicación.
}
.
.
.
}
Durante la espera se pueden procesar mensajes y por lo tanto otros eventos, sólo se bloquea el código de la función que está esperando.
Saludos.