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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2015, 15:38   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ну это можно сделать например
Но тогда terminate будет бесполезным, потому что читай пост №7
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2015, 13:35   #12
cometa
Пользователь
 
Регистрация: 19.09.2015
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Но тогда terminate будет бесполезным, потому что читай пост №7
Проблема в том что я не знаю как будет правильно выходить из цикла
Мне нужно чтоб,поток после завершения работы сам уничтожался...
cometa вне форума Ответить с цитированием
Старый 21.09.2015, 13:45   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А вот так:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TT }

  TT=class(TThread)
    protected procedure Execute; override;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    t:tt;
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  t.Terminate; //Устанавливаем флаг завершения цикла потока
  t.WaitFor; //Ждем пока поток не свалит на пенсию
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 t:=tt.Create(false);
 t.FreeOnTerminate:=true;
end;

{ TT }

procedure TT.Execute;
begin
 //В потоке проверяем свойство-флаг завершения работы потока
  while not Terminated do begin 
    sleep(100); 
    Form1.Caption:=TimeToStr(time); 
  end;
 //Если он включается - цикл завершается, поток уничтожается
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2015, 14:18   #14
cometa
Пользователь
 
Регистрация: 19.09.2015
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А вот так:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TT }

  TT=class(TThread)
    protected procedure Execute; override;
  end;

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    t:tt;
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  t.Terminate; //Устанавливаем флаг завершения цикла потока
  t.WaitFor; //Ждем пока поток не свалит на пенсию
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 t:=tt.Create(false);
 t.FreeOnTerminate:=true;
end;

{ TT }

procedure TT.Execute;
begin
 //В потоке проверяем свойство-флаг завершения работы потока
  while not Terminated do begin 
    sleep(100); 
    Form1.Caption:=TimeToStr(time); 
  end;
 //Если он включается - цикл завершается, поток уничтожается
end;

end.
А мне нужно чтоб поток после завершения работы уничтожался
А не при закрытии формы
cometa вне форума Ответить с цитированием
Старый 21.09.2015, 14:33   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ППц... смотрю в книгу - вижу Бальзака.
Еще раз глазками по моему примеру пробегаешься и смотришь на строку с FreeOnTerminate:=true; - эта установка говорит о том, что поток будет сам уничтожаться, как только его функция Execute завершит свою работу.
Если же ты хочешь завершать работу потоков по окончанию работы главного приложения то твои притензии не ясны: OnClose или OnDestroy формы - туда и пихать операторы стопинга потока.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив threads(Qt) Satansoft Помощь студентам 2 27.11.2014 22:15
threads Satansoft Общие вопросы C/C++ 0 22.11.2014 22:23
Threads Merzaffka C/C++ Сетевое программирование 0 29.03.2011 17:31
Threads ImmortalAlexSan Помощь студентам 0 20.05.2010 18:29
Службы останавливаются сами по себе Ronni10 Операционные системы общие вопросы 3 01.10.2009 17:20