Ora ho un'app quasi completa e la funzione successiva che voglio implementare è il threading. Ho scelto di andare con BeginThread(), anche se sono a conoscenza di TThread in delphi. Il problema che sto incontrando è la struttura della chiamata BeginThread(). Normalmente la linea di programma che chiama la funzione voglio essere filettato èBeginThread Structure - Delphi
CompareFiles(form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op);
op è un numero intero.
La linea che ho passato fuori per creare un filo da essa è
BeginThread(nil,0,CompareFiles,Addr('form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op'),0,x);
Dalla piccola quantità di infromation posso trovare su come utilizzare effettivamente BeginThread() questo dovrebbe essere un bene chiamata tuttavia, il complimento di tutto ciò che ottengo è un errore di complier sulla struttura dei miei parametri di istruzione BeginThread().
MODIFICA PER INFORMAZIONI.
La procedura attuale che chiama CompareFiles è
procedure TForm1.Panel29Click(Sender: TObject);
var
op,x : integer;
begin
if (Form1.Edit3.Text <> '') AND (Form1.Edit4.Text <> '') then
begin
op := 3;
if RadioButton7.Checked = True then op := 0;
if RadioButton3.Checked = True then op := 1;
if RadioButton4.Checked = True then op := 2;
if RadioButton5.Checked = True then op := 3;
if RadioButton6.Checked = True then op := 4;
CompareFiles(form1.Edit3.Text,Form1.Edit4.Text,Form1.StringGrid2,op);
end;
end;
Se dovessi usare TThread come suggerito da un paio di persone, e come visualizzato da Rob sotto, sono confuso a come a) sarei passato op, Edit3/4.Text e StringGrid2 su CompareFiles. Indovinare dall'esempio di TThread che ho visto ho pensato di sostituire il codice precedente con TCompareFilesThread.Execute
e mettere il codice corrente Panel29Click in TCompareFilesThread.Create
e quindi aggiungere
FEdit3Text := Edit3Text;
FEdit4Text := Edit4Text;
FGrid := Grid;
a questo
FEdit3Text := Form1.Edit3.Text;
FEdit4Text := Form1.Edit4.Text;
FGrid := Form1.StringGrid2;
Ma Ho questa sensazione fastidiosa che è totalmente fuori luogo.
"I reclami su cose che non corrispondono" non è una descrizione molto utile. Potresti modificare la tua domanda e incollare una copia del messaggio di errore per favore? –
Sono anche curioso del perché tu stia scegliendo * non * di usare TThread? L'uso di funzioni di thread globali senza un piacevole object encapsulation complica enormemente le cose relative alla concorrenza e alle condizioni di gara. Sono anche curioso del perché ti stai avvicinando al completamento dell'applicazione e poi ho deciso di aggiungere il threading. IMO, il threading dovrebbe essere considerato fin dall'inizio e non un ripensamento. Esiste un'alta probabilità di infilare mine terrestri se non prese in considerazione abbastanza presto. –
Il motivo per cui il threading è stato implementato ora è che questa è un'app di apprendimento per me. Il threading è sempre stato pianificato, ma si limita a implementarlo ora che le funzionalità principali dell'app sono complete (soprattutto). Per quanto riguarda TThread, non riesco a trovare una buona spiegazione su come usarlo. – jskrwyk