Ho problemi con multi thread in delphi. Ho una lista di nomi (qualcosa su 2.000 nomi), e ho bisogno di ottenere alcuni dati di ciascun nome nel mio sito. Il mio sistema funziona perfettamente, tranne il controllo del thread.Multi Thread Delphi
Voglio creare 10 thread e, quando alcuni thread terminano, creare un altro ... fino alla fine della lista.
var
Form1: TForm;
tCount: Integer; //threads count
implementation
type
TCheck = class(TThread)
public
constructor Create(Name: string);
destructor Destroy; Override;
protected
procedure Execute; Override;
end;
MainT = class(TThread)
protected
procedure Execute; Override;
end;
destructor TCheck.Destroy;
begin
Dec(tCount);
end;
procedure MainT.Execute;
var
i: Integer;
Load: TStringList;
begin
Load:=TStringList.Create;
Load.LoadFromFile('C:\mynames.txt');
for i:= 0 to Load.Count -1 do
begin
if tCount = 10 then //if we have 10 threads running...
begin
repeat
Sleep(1);
until tCount < 10;
end;
TCheck.Create(Load.Strings[i]);
TCheck.Start;
Inc(tCount);
end;
end; // end of procedure
Beh, non ho messo il TCheck.Constructor perché il problema è il metodo come sto verificare il numero di thread creati. Voglio dire, il mio software si ferma, senza alcun messaggio di errore, a volte controlla 500 nomi, a volte 150 nomi ...
Ci scusiamo per il cattivo inglese.
Potrebbe pubblicare TCheck Ctor? –
Inoltre, se vuoi 10 thread, crea 10 thread e fai in modo che tutto il tuo lavoro venga processato accodandoli a loro. Non creare/terminare/distruggere continuamente. Dimentica i thread di tCount e micro-gestione. –
Sì. Hai bisogno di un produttore che riempia una coda protetta da thread e 10 utenti che la scaricano. –