Mam problemy z wieloma wątkami w delphi. Mam listę nazwisk (coś około 2000 nazwisk) i muszę uzyskać dane o każdym nazwisku w mojej witrynie. Mój system działa idealnie, z wyjątkiem kontroli wątków.Wiele wątków Delphi
Chcę utworzyć 10 wątków, a gdy jakiś wątek się zakończy, utwórz kolejny ... do końca listy.
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
Cóż, ja nie wprowadził TCheck.Constructor ponieważ problemem jest sposób w jaki jestem sprawdzić liczbę utworzonych wątków. Mam na myśli, że moje oprogramowanie przestało działać, bez żadnego komunikatu o błędzie, czasami sprawdzam nazwy 500, czasem 150 nazw ...
Przepraszamy za zły angielski.
Możesz napisać TCheck ctor? –
Ponadto, jeśli chcesz mieć 10 wątków, zrób 10 wątków i każ im przetwarzać całą pracę, kolejkując do nich rzeczy. Nie twórz ich nieustannie/zakończ/zniszcz. Zapomnij o wątkach tCount i mikro-zarządzaniu. –
Tak. Potrzebujesz producenta, który zapełni kolejkę wątków i 10 konsumentów, którzy go wyrzucą. –