Muestra una pantalla de bienvenida mientras se ejecuta una conexión de base de datos (que puede llevar mucho tiempo)

Estoy tratando de mostrar una pantalla de inicio y no congelar la aplicación mientras se conecta a una base de datos. Las conexiones normales (a MSSQL a través de ADO) toman unos 300 ms, y esto no hace que el hilo principal se muestre como "no responde" en Windows.

Sin embargo, en el caso de (a) un error de red o (b) un error de configuración (nombre de host / instancia del servidor SQL no válido), se demora 60 segundos en expirar. Esto no solo hace que la aplicación no responda, sino que es casi imposible mostrar un error o mensaje cuando se va a congelar. Podría mostrar un mensaje antes de iniciar la conexión, pero realmente no hay solución cuando el hilo principal se bloquea durante 60 segundos.

La solución parece ser mover la conexión a un hilo de fondo. Esto condujo al siguiente código:

una clase TThread que realiza la conexión de fondo y algunos SyncObj como un TEvent utilizado para enviar una señal al hilo principal.

Un bucle en el hilo principal con este código:

BackgroundThread.StartConnecting;
while not BackgroundThread.IsEventSignalled do begin
   Application.ProcessMessages; // keep message pump alive.
end;
// continue startup (reports error if db connection failed)

¿Es este el camino correcto? Mis dudas implican los siguientes elementos de la solución anterior:

R. Estaría llamando a Application.ProcessMessages, que considero un olor extremo a código. (Esto podría ser una excepción permisible a esta regla)

B. Estoy introduciendo hilos en el inicio de una aplicación, y me preocupa la introducción de errores.

Si alguien tiene una implementación de referencia que se sabe que está libre de condiciones de carrera, que puede hacer una conexión en segundo plano a ADO, y se sabe que es un enfoque seguro, eso sería realmente útil. De lo contrario, los consejos generales o ejemplos parciales son buenos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta