Non c'è nulla di strano...in realtà, capita spesso di avere applicazioni che hanno la necessità di eseguire lunghe elaborazioni, ma dovrebbero consentire allo stesso tempo di utilizzare altri programmi e, possibilmente, anche l'applicazione stessa (vedi il caso di stampe, aggiornamenti database, ecc.).

A questo scopo, vengono in aiuto i thread.

Per creare un thread, puoi servirti del wizard fornito da Delphi che non fa altro che predisporti una classe che eredita da TThread (la classe che incapsula le funzioni API di Windows per la gestione dei thread); la classe ha un metodo Execute nel quale puoi inserire le istruzioni che devono essere eseguite in modo asincrono rispetto all'applicazione.

Ne sto facendo uso all'interno di un programma che scarica posta da diversi server POP3 e la smista all'interno di caselle interne; per non bloccare il programma, viene creato un thread per ogni account POP3 che scarica nel momento opportuno la posta consentendo però di monitorarne lo stato dall'applicazione principale.

Puoi trovare informazioni sui thread nella Guida in linea di Delphi.

P.S.: occorre fare molta attenzione quando si utilizzando risorse che vengono condivise dal nuovo thread e dal thread principale dell'applicazione (primario), poichè è necessario proteggere adeguatamente tali risorse utilizzando elementi di sincronizzazione come le Critical Section o i Mutex.