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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.01.2013, 19:47
dpj dpj вне форума
Прохожий
 
Регистрация: 13.01.2013
Сообщения: 1
Репутация: 10
По умолчанию Завершение нескольких потоков Tthread

Не знаю как правильно завершить созданные потоки.
Вот код в котором при нажатии кнопки Button1 создается три потока.

Основной поток
Код:
uses th;
 
procedure TFormMain.Button1Click(Sender: TObject);
  var
  th: array[0..2] of ThMy;
  I: Integer;
begin
  for I := 0 to 2 do begin
    th[i]:= ThMy.Create(true);
    th[i].FreeOnTerminate:= false;
    th[i].Priority:= tpNormal;
    th[i].Start;
  end;
end;


А вот собственно сам поток TThread


Код:
type
  ThMy = class(TThread)
  private
    Msg: string;
    procedure ShowMsg;
  protected
    procedure Execute; override;
  end;
 
implementation
 
uses Unit1;
 
procedure ThMy.Execute;
  var
  i: Integer;
begin
  while not Terminated do begin
    Inc(i);
    Sleep(10);
  end;
end;
 

После запуска потока цикл while ожидает Terminated но вот как его послать и при том, что потока 3.
Вот собственно хочу завершить не все потоки сразу, а выборочно какой-либо из них.

Буду бдагодарен за любую помощь.
Ответить с цитированием
  #2  
Старый 13.01.2013, 23:29
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Можно сделать так:
Код:
type
  ThMy = class(TThread)
  private
    Msg: string;
    procedure ShowMsg;
  protected
    procedure Execute; override;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    th: array[0..2] of ThMy;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure ThMy.Execute;
  var
  i: Integer;
begin
  while not Terminated do begin
    Inc(i);
    Sleep(10);
  end;
  Synchronize(ShowMsg);
end;

procedure ThMy.ShowMsg;
begin
  ShowMessage('конец');
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to 2 do begin
    th[i]:= ThMy.Create(true);
    th[i].FreeOnTerminate:= false;
    th[i].Priority:= tpNormal;
    th[i].Resume;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if not Assigned(th[0]) then
    ShowMessage('нет потока 0')
  else
  begin
    th[0].Terminate;
    th[0]:= nil;
  end;
end;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter