Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.28;
Скачать: [xml.tar.bz2];

Вниз

Потоки как работать параллельно   Найти похожие ветки 

 
nonameee   (2010-01-22 18:57) [0]

Только начал разбираться с потоками и вот что получилось:
Программа скачивает в 3 потоках странички через Idhttp,но как я понял она их скачивает не паралельно а  последовательно.

мне нужно написать программу каторая будет скачивать 20 страничек и каждую из этих страничек нужно пропарсить функцией Getkapcha (выполнение этой функции занимает 30-40 секунд)
тоесть:
1) Скачиваю странику,вызываю функцию getkapcha,Пока выполняеться эта функция  нужно как-то запустить второй поток после чего запустить во 2-ом потоке скачивание странички и запустить функцию getkapcha итд...
думаю вы поняли меня :)

После того как на всех потоках скачались странички  и функция отпарсила текст (функция getkapcha ,каторая выполняеться 30 сек) нужно закрыть все потоки

что нужно поправить  и как вообще это делается подскажите пожалуйста
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan, ComCtrls,idhttp;

type
TForm1 = class(TForm)
Button2: TButton;

Button4: TButton;

procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);

procedure Button4Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

type
TMyPotok = class(TThread)
private
{ Private declarations }
protected
procedure execute; override;
end;

Const
MaxPotoks = 6;

var
Form1: TForm1;
MyPotokX: Array [0..10] of TMyPotok;
myidHTTP :Array [0..10] of TidHTTP;
myOtvet:Array [0..10] of TStringList;
I_potok: Integer;

implementation

{$R *.dfm}

Procedure TMyPotok.execute;
VAR
i: Integer;
begin

myOtvet[I_potok].Text:=myidHTTP[I_potok].Get("http://ya.ru/");
//###################################################################
//getCapcha;    // тут будет функция ,каторая будет выполняться 30 секунд!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//###################################################################
myOtvet[I_potok].SaveToFile(inttostr(random(999))+".html");
Application.ProcessMessages;
End;

procedure TForm1.Button2Click(Sender: TObject);
VAR
i: integer;
I_potok:integer;
begin

for I_potok:=0 to 2 do begin
myidHTTP[I_potok] := TidHTTP.Create(nil);
myOtvet[I_potok]:= TStringList.Create;
MyPotokX[I_potok]:= TMyPotok.create(true);
MyPotokX[I_potok].FreeOnTerminate:= True;
MyPotokX[I_potok].Priority:= tpLowest;

end;

try
For i:=0 to 2 do MyPotokX[i].Resume;
except
exit;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
I_potok:=0;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
I_potok:= 0;
end;

end.


 
Стенка ©   (2010-01-23 01:44) [1]

А ты, часом, не спамер?


 
Германн ©   (2010-01-23 01:54) [2]


>
> Procedure TMyPotok.execute;
> VAR
> i: Integer;
> begin
>
> myOtvet[I_potok].Text:=myidHTTP[I_potok].Get("http://ya.
> ru/");
> //###################################################################
> //getCapcha;    // тут будет функция ,каторая будет выполняться
> 30 секунд!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> //###################################################################
> myOtvet[I_potok].SaveToFile(inttostr(random(999))+".html");
>
> Application.ProcessMessages;
> End;
>

А вот нахрена в доппотоке Application.ProcessMessages? Просто интересно.


 
вкпкуп   (2010-01-23 02:35) [3]

спамер:D

вопрос решен,сорри за беспокойство.

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs,idhttp;

type
TMyThread = class(TThread)
 private
   FUrl: string;
 public
   constructor Create(CreateSuspended: Boolean; AUrl: string);
 protected
   procedure Execute; override;
   procedure UpdateCaption;
 end;

implementation

uses Unit1;

{ Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,

     Synchronize(UpdateCaption);

 and UpdateCaption could look like,

   procedure TMyThread.UpdateCaption;
   begin
     Form1.Caption := "Updated in a thread";
   end; }

{ TMyThread }

constructor TMyThread.Create(CreateSuspended: Boolean; AUrl: string);
begin
 inherited Create(CreateSuspended);
 FUrl := AUrl;
 FreeOnTerminate := true;
end;

procedure TMyThread.Execute;
var
 http: TIdHTTP;
 str: TStringList;
begin
str := TStringList.Create();
 http := TIdHTTP.Create(nil);
 str.Text:= http.Get(FUrl);
 str.SaveToFile(inttostr(random(222))+".html");
 http.Free;
 str.free ;
   sleep(5000);
 Synchronize(UpdateCaption);

end;

procedure TMyThread.UpdateCaption;
begin
 Form1.Memo2.Lines.Add(FUrl);
end;

end.


 
Германн ©   (2010-01-23 02:54) [4]


> вопрос решен,сорри за беспокойство.
>

Гугль - великое подспорище!
Вся проблема только в выборе варианта ответа. :)


 
Anatoly Podgoretsky ©   (2010-01-23 14:11) [5]

> Германн  (23.01.2010 02:54:04)  [4]

Не, вопроса.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.03.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
15-1263146426
Petr V. Abramov
2010-01-10 21:00
2010.03.28
RBC празднует :)


2-1264675704
Starraider
2010-01-28 13:48
2010.03.28
Выравнивание колонок StringGrid


2-1264114096
Евгений Р.
2010-01-22 01:48
2010.03.28
Как изменить свойство Required поля Access


4-1231686803
Ort
2009-01-11 18:13
2010.03.28
Как выделить все строку в Listview


4-1231708108
kalexi
2009-01-12 00:08
2010.03.28
PopupMenu из ресурса.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский