Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.01.2010, 18:54
InfectedM InfectedM вне форума
Прохожий
 
Регистрация: 21.10.2007
Сообщения: 5
Репутация: 10
По умолчанию Потоки help

все походу...

Код:
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.

Admin: Учимся пользоваться тегами!

Последний раз редактировалось Admin, 24.01.2010 в 22:02.
Ответить с цитированием
  #2  
Старый 22.01.2010, 18:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну все правильно. Ты же используешь всего один компонент для скачивания. Если ты хочешь распаралелить работу, то создавай IdHTTP в каждом потоке свой.
Ответить с цитированием
  #3  
Старый 23.01.2010, 15:49
InfectedM InfectedM вне форума
Прохожий
 
Регистрация: 21.10.2007
Сообщения: 5
Репутация: 10
По умолчанию

при нажатии на кнопку создаеться столько потоков сколько существует записей в memo1

допустим я создал 50 потоков.
1)как мне остановить вручнудю все эти 50 потоков и удалить их?
2)чтобы потоки удалились нужно в конце писать self.Terminate; self.free; ? или он сам удаляеться
3)как остановить например только 10-ый поток?
подскажите пожалуйса.


Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to Memo1.Lines.Count - 1 do begin
    TMyThread.Create(false, Memo1.lines[i]);
  end;
end;


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

implementation

uses Unit1;

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);

    sleep(7000);
      str.SaveToFile(inttostr(random(222))+'.html');
      
  http.Free;
  str.free ;
  Synchronize(UpdateCaption);
  // self.Terminate;
     //self.free;
end;

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

Последний раз редактировалось Admin, 24.01.2010 в 22:03.
Ответить с цитированием
  #4  
Старый 24.01.2010, 21:11
guranvir guranvir вне форума
Начинающий
 
Регистрация: 19.01.2010
Сообщения: 113
Репутация: 11
По умолчанию

Весь вопрос: что значит остановить? Если вы хотите чтобы они нормально ликвидировались когда они сами отработают, то установите свойство FreeOnTerminate в true, а если при каких то условиях то можно попробовать использовать TEvent, временный тормоз потока это метод suspend, а чтобы его разрушить лучше вызвать destroy как и для любого другого объекта по моему
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter