No, ma infatti le stranezze stanno tutte nel fatto che ho ben poca esperienza con il multithreading...
Comunque la struttura che ho creato è piuttosto semplice.
Nel metodo Execute del mio nuovo thread, ho inserito un richiamo a una procedura, EffettuaConnessione(DBConnectionString : string), dichiarata e implementata in un'altra unità, che ha il mero compito di effettuare la connessione al DB:
Nota: ConnessionePredefinita è un componente TADOConnection dichiarato nella stessa unità.codice:procedure EffettuaConnessione(DBConnectionString : string); begin ConnessionePredefinita.ConnectionString := DBConnectionString; ConnessionePredefinita.Connected := True; end;
Come ho già detto, ho inserito il richiamo a questa procedura in un secondo thread, che a sua volta può essere interrotto grazie a un pulsante "Annulla" presente nella Form principale. Questo pulsante "Annulla" invoca il metodo Terminate del thread, che però non ha alcun effetto. Il programma continua serenamente ad attendere la riposta del server, in una situazione di freeze totale. Dopo 30 secondi va in timeout e mostra un'eccezione. Allora, finalmente, il thread viene terminato.

Rispondi quotando