26.05.2011, 19:47
|
#1
|
Регистрация: 15.05.2011
Сообщений: 3
|
многопоточное приложение
Цитата:
type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure ThreadExit(Sender : TObject); // Êîä êîòîðûé áóäåò âûïîëíÿòñÿ ïðè çàâåðøåíèè ïîòîêà
procedure Execute; override;
public
constructor Create; overload;
end;
type
TForm1 = class(TForm)
sFilenameEdit1: TsFilenameEdit;
sSkinManager1: TsSkinManager;
sMemo1: TsMemo;
sButton1: TsButton;
sLabel2: TsLabel;
IdHTTP1: TIdHTTP;
sFilenameEdit2: TsFilenameEdit;
sLabel1: TsLabel;
sRadioButton1: TsRadioButton;
sRadioButton2: TsRadioButton;
sLabel3: TsLabel;
sLabel4: TsLabel;
sLabel5: TsLabel;
sLabel6: TsLabel;
sButton2: TsButton;
sEdit1: TsEdit;
procedure sButton1Click(Sender: TObject);
procedure sEdit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.sButton1Click(Sender: TObject);
var
PostData:TSTringList;
number:TSTringList;
fromno:TSTringList;
i:longint;
begin
PostData:=TSTringList.Create;
number:=TSTringList.Create;
fromno:=TSTringList.Create;
number.LoadFromFile(PChar(sfilename Edit1.Text));
fromno.LoadFromFile(PChar(sfilename Edit1.Text));
For i:=0 to number.Count-1 do
begin
PostData.Add('fromno='+fromno.Strin gs[i]);
PostData.Add('countrycode=+7');
PostData.Add('number='+number.Strin gs[i]);
PostData.Add('message='+smemo1.text );
PostData.Add('b1=SEND SMS');
PostData.Add('reff=http://www.freesmscraze.com/worldwide/send_free_sms_to_russia/sms/success_us.php');
idhttp1.AllowCookies:=true;
idhttp1.HandleRedirects:=True;
idhttp1.Post('http://www.freesmscraze.com/worldwide/send_free_sms_to_russia/sms/ussmsscript.php',PostData)
constructor TMyThread.Create;
begin
Create(True); // True îçíà÷àåò, ÷òî ïîñëå ñîçäàíèÿ êëàññà ïîòîê àâòîìàòè÷åñêè çàïóùåí íå áóäåò.
FreeOnTerminate := True; // Óêàçûâàåì, ÷òî ïîñëå çàâåðøåíèÿ ñâîåãî êîäà ïîòîê çàâåðøèòñÿ ñàì, ò.å íå íóæíî âûçûâàòü ìåòîä Terminate
OnTerminate := ThreadExit // Ïðè çàâåðøåíèè âûçûâàòü ïðîöåäóðó ThreadExit
Priority := tpNormal; // Óñòàíàâëèâàåì ïðèîðèòåò
Inc(alive); // Óâåëè÷èâàåì ñ÷åò÷èê æèâûõ ïîòîêîâ(ïðèãîäèòñÿ, êîãäà ïîòîêîâ áóäåò áîëüøå 1)
Resume; // Çàïóñêàåì ïîòîê(ò.å âûçûâàåì ìåòîò Execute)
end;
procedure TMyThread.ThreadExit(Sender: TObject);
begin
Dec(alive);
end;
procedure TMyThread.Execute;
var
HTTP : TIdHTTP; // Âàæíî ñîçäàâàòü IdHTTP â ïîòîêå
cur_site : string; // ÓÐË òåêóùåãî ñàéòà
Response : TStringList; // Èñõîäíûé êîä ñòðàíèöû
MyThread : TMyThread;
alive : integer; // Ñ÷åò÷èê æèâûõ ïîòîêîâ
codes : Integer; // Êîë-âî ïîëó÷åííûõ èñõîäíèêîâ
SiteList : TStringList; // Ñïèñîê ñàéòîâ
begin
{ Ñîçäàåì îáúåêòû }
Response := TStringList.Create;
HTTP := TIdHTTP.Create(nil);
HTTP.HandleRedirects := True;
{ Íàì äîñòàòî÷íî çàïóñòèòü îäèí ïîòîê, â êîòîðîì áóäåò âûïîëíÿòñÿ ñëåä. öèêë, à íå çàïóñêàòü êàæäûé ðàç íîâûé, êîãäà äðóãîé âûïîëíèò ñâîé êîä }
while (codes < SiteList.Count)and(Terminated = False) do // Ïîêà êîë-âî ïîëó÷åííûõ èñõîäíèêîâ ìåíüøå êîëè÷åñòâà ñàéòîâ, è ïîòîê íå îñòàíîâëåí, äåëàòü:
begin
cur_site := SiteList[codes]; // Ïîëó÷àåì óðë
inc(codes); // Óâåëè÷èâàåì codes íà 1
try
Response.Text := HTTP.Get(cur_site); // Òóò äåëàåì çàïðîñ
except
Continue;
end;
cur_site := StringReplace(cur_site, '.', '', [rfReplaceAll]); // Òóò íåìíîãî ïðàâèì óðë ñàéòà, ÷òî áû ìîæíî áûëî ñîõðàíèòü òåêñòîâèê
Delete(cur_site, 1, 7);
Response.SaveToFile(cur_site + '.html'); // Ñîõðàíÿåì, ìîæíî â html, ìîæíî è â txt
end; // while
end;
end;
procedure TForm1.sEdit1Change(Sender: TObject);
begin
MyThread : array of TMyThread;
............
SetLength(MyThread, StrToInt(sEdit3.Text));
for i := 0 to StrToInt(Edit.1Text) - 1 do
MyThread[i] := TMyThread.Create;
end;
|
поправьте плиз, что я ни так сделал?
с меня +
заранее благодарен
|
|
|