In base alla progettazione, un'applicazione Delphi viene eseguita in un thread. Per velocizzare alcune parti dell'applicazione, è possibile decidere di aggiungere diversi percorsi di esecuzione simultanei nell'applicazione Delphi.
Nella maggior parte degli scenari, le applicazioni di database create con Delphi sono a thread singolo: una query eseguita sul database deve terminare (elaborazione dei risultati della query) prima di poter recuperare un altro set di dati.
Per accelerare l'elaborazione dei dati, ad esempio il recupero dei dati dal database per creare report, è possibile aggiungere un thread aggiuntivo per recuperare e operare sul risultato (recordset).
Continua a leggere per conoscere le 3 trap nelle query del database ADO multithread:
Nel noto scenario in cui un cliente effettua ordini contenenti articoli, potrebbe essere necessario visualizzare tutti gli ordini per un cliente specifico lungo il numero totale di articoli per ciascun ordine.
In un'applicazione "normale" a thread singolo è necessario eseguire la query per recuperare i dati, quindi scorrere il recordset per visualizzare i dati.
Se si desidera eseguire questa operazione per più di un cliente, è necessario eseguire in sequenza la procedura per ciascuno dei clienti selezionati.
In un scenario multithreading è possibile eseguire la query del database per ogni cliente selezionato in un thread separato-e quindi far eseguire il codice più volte.
Supponiamo che tu voglia visualizzare gli ordini per 3 clienti selezionati in un controllo casella elenco Delphi.
genere
TCalcThread = classe(TThread)
privato
procedura RefreshCount;
protetta
procedura Eseguire; oltrepassare;
pubblico
ConnStr: widestring;
SQLString: widestring;
ListBox: TListBox;
Priorità: TThreadPriority;
TicksLabel: TLabel;
Zecche: cardinale;
fine;
Questa è la parte dell'interfaccia di una classe di thread personalizzata che useremo per recuperare e operare su tutti gli ordini per un cliente selezionato.
Ogni ordine viene visualizzato come articolo in un controllo casella di riepilogo (ListBox campo). Il connStr campo contiene la stringa di connessione ADO. Il TicksLabel contiene un riferimento a un controllo TLabel che verrà utilizzato per visualizzare i tempi di esecuzione del thread in una procedura sincronizzata.
Il RunThread procedura crea ed esegue un'istanza della classe thread TCalcThread.
funzione TADOThreadedForm.RunThread (SQLString: widestring; LB: TListBox; Priorità: TThreadPriority; lbl: TLabel): TCalcThread;
var
CalcThread: TCalcThread;
inizio
CalcThread: = TCalcThread.Create (true);
CalcThread.FreeOnTerminate: = true;
CalcThread.ConnStr: = ADOConnection1.ConnectionString;
CalcThread.SQLString: = SQLString;
CalcThread.ListBox: = LB;
CalcThread.Priority: = Priorità;
CalcThread.TicksLabel: = lbl;
CalcThread.OnTerminate: = ThreadTerminated;
CalcThread.Resume;
Risultato: = CalcThread;
fine;