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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2023, 02:47   #21
unreal2x
Пользователь
 
Аватар для unreal2x
 
Регистрация: 22.01.2012
Сообщений: 39
По умолчанию

Не останавливается работа потока... Подскажите, где не правильно?
При нажатии на остановить, пишет поток не работает... а в листвью дальше загружаются строки... и меседж завершено.

Код:
type
  TMyThread1 = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  public
  end;

var
  Form1: TForm1;
  MyThread1: TMyThread1;
Код:
procedure TMyThread1.Execute;
var
 Item: TListItem;
 L: TStringList;
begin
...
 L:=TStringList.Create;
 L.LoadFromFile(form1.OpenDialog1.FileName);
...
form1.N2.Caption:='Открыть папку...';
showmessage('Завершено.');
end;
Код:
procedure TForm1.N2Click(Sender: TObject);
begin

 if N2.Caption='Открыть папку...' then
 begin

  if form1.OpenDialog1.Execute then
  begin
  N2.Caption:='Остановить...';
  MyThread1:= TMyThread1.Create(True);
  MyThread1.FreeOnTerminate := True;
  MyThread1.Start;
  end;

 end
 else
 begin

  MyThread1.Terminate;
  N2.Caption:='Открыть папку...';
  showmessage('Остановлено.');

  if MyThread1 <> nil then
  begin

    if MyThread1.Terminated then
    begin
    ShowMessage('Поток не работает');
    end
    else
    begin
    ShowMessage('Поток работает');
    end;

  end
  else
  begin
  ShowMessage('Поток не создан');
  end;

 end;

end;
no sleep.
unreal2x вне форума Ответить с цитированием
Старый 02.02.2023, 03:25   #22
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Для обновления заголовка в Form1.N2.Caption необходима синхронизация потоков т.к. окно обрабатывается основным потоком, а вы изменяете его заголовок из дополнительного.

MyThread1.Terminate не убивает поток, а только устанавливает статус в MyThread1.Terminated := true
Для завершения потока используйте MyThread1.FreeAndNil
macomics вне форума Ответить с цитированием
Старый 02.02.2023, 05:52   #23
unreal2x
Пользователь
 
Аватар для unreal2x
 
Регистрация: 22.01.2012
Сообщений: 39
По умолчанию

Вставил внутрь Execute после того как добавит итем и все сабитемы в строку...
Решило проблему. Спасибо.

Код:
    if MyThread1.Terminated=true then
    begin
      MyThread1.Free;
    end;
no sleep.

Последний раз редактировалось unreal2x; 02.02.2023 в 06:00.
unreal2x вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Грамотное завершение потока, если поток на паузе winhttp Общие вопросы .NET 3 11.01.2013 12:55
Завершение потока coNsept Общие вопросы C/C++ 3 20.06.2012 19:42
Принудительное завершение потока не работает :(! TEED! Работа с сетью в Delphi 3 06.06.2012 14:34
C# BackgroundWorker - завершение работы потока Lastsummer Помощь студентам 2 16.03.2011 18:04
Как отследить завершение выполнения потока TThread? Трик Общие вопросы Delphi 3 24.10.2007 14:55