Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2011, 19:47   #1
favorite
 
Аватар для favorite
 
Регистрация: 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;
поправьте плиз, что я ни так сделал?
с меня +
заранее благодарен
favorite вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточное приложение MaXoN66613 Помощь студентам 0 07.06.2010 12:36
многопоточное программирование schnaps Общие вопросы Delphi 0 27.04.2009 19:09
Многопоточное приложение на Indy 2 Core2Duo Работа с сетью в Delphi 1 09.04.2009 11:42
Многопоточное приложение на Indy Core2Duo Работа с сетью в Delphi 15 08.04.2009 16:45
Многопоточное программирование madmax08 Общие вопросы .NET 4 15.07.2008 23:58