есть программа, которая берёт строку из текстового файла и на основе её переходит по ссылке IdHTTP.Get. пытаюсь реализовать многопоточность, но никак не выходит
почему-то потоки (сколько бы я их не задавал) за секунду убиваются до 1... и ещё другая проблема, как сделать так, чтобы потоки при работе с текстовым файлом распределили между собой строки, тем самым повышая производительность? а не обрабатывали все вместе одну и ту же. заранее благодарен
вот код юнита с потоком:
Код:
type
TMyThread = class(TThread)
private
s,smod:string;
i:integer;
protected
procedure ShowResult;
procedure ThreadExit(Sender : TObject);
procedure Execute; override;
public
constructor Create; overload;
constructor TMyThread.Create;
begin
Create(true);
Inc(alive);
Priority:=tpHigher;
OnTerminate:=ThreadExit;
Resume;
end;
procedure TMyThread.ThreadExit(Sender: TObject);
begin
dec(alive);
end;
procedure TMyThread.Execute;
begin
assignfile(f,path);
reset(f);
assignfile(f1,extractfilepath(path)+'1.txt');
rewrite(f1);
repeat
while not eof(f) do
begin
readln(f,s);
login:=copy(s,1,pos('@',s)-1);
domain:=copy(s,pos('@',s)+1,length(s));
delete(domain,pos('.',domain),3);
code:=Form1.IdHTTP1.Get('http://my.mail.ru/'+domain+'/'+login+'/');
//опущу часть кода
Synchronize(ShowResult);
end;
until Terminated;
closefile(f);
closefile(f1);
for tr:=0 to n-1 do
begin
MyThread[i].Terminate;
Synchronize(ShowResult);
end;
end;
и вот код главного юнита:
Код:
var
alive,n,q:integer;
MyThread:array of TMyThread;
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=10;
setlength(mythread,n);
for q:=0 to n-1 do
MyThread[q]:=TMyThread.Create;
end;