|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
idHTTP.Get и многопоточность
есть программа, которая берёт строку из текстового файла и на основе её переходит по ссылке 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; |