El problema es que WaitForSingleObject para todo. Lo que no entiendo es si la llamas tú o si lo hace la dll. Si la llamas tú, sabrás cual es el proceso que esperas que termine... No debería llamarse desde un hilo pues deja de tener sentido ese hilo.
Si puedes:
Código:
función(...)
{
.
.
// Necesito datos.
Abro hilo que me da datos
//espero datos. Mi aplicación no se detendrá, pero si esta función.
for(;hilo->Terminado==false;) Application->ProcessMessages();
// Ya tengo los datos y sigo con la función
.
.
}
¿Te sirve?
Saludos.