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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2012, 18:53   #1
Cyrix
Пользователь
 
Регистрация: 08.10.2011
Сообщений: 26
По умолчанию Поток - стоп, пауза, продолжить, выход.

PHP код:
type
  TForm1 
= class(TForm)
    
Memo1TMemo;
    
Button1TButton;
    
Button2TButton;
    
procedure Button1Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

TNewThread=class(TThread)
  Private
    Protected
      
Procedure Executeoverride;
  Public
    
Constructor Create(CreateSuspendedboolean);
  
end;

var
  
Form1TForm1;

implementation

{$R *.dfm}

constructor TNewThread.Create(CreateSuspendedboolean);
begin
 inherited Create
(CreateSuspended);
end;

procedure TNewThread.Execute;
var
 
i:integer;
begin
 
for i:=0 to 10000 do Form1.Memo1.Lines.Add(IntToStr(i));
end;

procedure TForm1.Button1Click(SenderTObject);
begin
 TNewThread
.Create(false);
end;

procedure TForm1.Button2Click(SenderTObject);
begin
Form1
.Close;
end
Подскажите как правильно остановить поток или сделать паузу а потом возобновить.

Последний раз редактировалось Cyrix; 03.01.2012 в 23:21.
Cyrix вне форума Ответить с цитированием
Старый 04.01.2012, 12:06   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Используйте методы потока Suspend (пауза) и Resume (продолжить).
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 04.01.2012, 12:22   #3
Cyrix
Пользователь
 
Регистрация: 08.10.2011
Сообщений: 26
По умолчанию


Ошибка, почему и прошу помощи.

Последний раз редактировалось Cyrix; 04.01.2012 в 12:28.
Cyrix вне форума Ответить с цитированием
Старый 04.01.2012, 12:33   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Чтобы иметь возможность приостанавливать поток, то параметр CreateSuspended при содании потока должен быть True
2. И ознакомтесь с синхронизацией в потоке. То что у вас в Execute ни в какие ворота не лезет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.01.2012, 17:53   #5
Cyrix
Пользователь
 
Регистрация: 08.10.2011
Сообщений: 26
По умолчанию

Никакой толковой помощи не дали. Тема закрыта.
Cyrix вне форума Ответить с цитированием
Старый 04.01.2012, 18:31   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

в delphi 2010 вместо resume и suspend методов, используются Start и Pause соответственно.

Поток должен быть вынесен в глобальную переменную.

пауза так:
Код:
if not (Thread = nil) then
begin
  if not Thread.Suspended then Thread.Suspend;
end;
продолжение:
Код:
if not (Thread = nil) then
begin
  if Thread.Suspended then Thread.Resume;
end;
Остановка:
Код:
if not (Thread = nil) then
begin
  Thread.Terminate;
end;
Естественно FreeOnTerminate должно быть TRUE. Чтобы обьект убрался из памяти сам, когда закончит работу.

Цитата:
Никакой толковой помощи не дали. Тема закрыта.
Не правы вы. Вы никакой информации толком не дали. А советы вам дали дельные, запомните и используйте.

Последний раз редактировалось Человек_Борща; 04.01.2012 в 18:34.
Человек_Борща вне форума Ответить с цитированием
Старый 04.01.2012, 19:02   #7
Cyrix
Пользователь
 
Регистрация: 08.10.2011
Сообщений: 26
По умолчанию

Цитата:
Поток должен быть вынесен в глобальную переменную.
Цикл не останавливается, ни паузой, ни остановкой.
Cyrix вне форума Ответить с цитированием
Старый 04.01.2012, 19:21   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

в тело цикла
Код:
if Terminated then exit
Это заставит прервать цикл, потоку передан Terminate флаг.
Человек_Борща вне форума Ответить с цитированием
Старый 04.01.2012, 19:44   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

что бы что-то остановить надо знать(иметь) что останавливать
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 newthread:=TNewThread.Create(TRUE);
end;
смотри пост 4.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 04.01.2012, 20:16   #10
Cyrix
Пользователь
 
Регистрация: 08.10.2011
Сообщений: 26
По умолчанию

evg_m, да не останавливает. Наверно проверял все советы, не так просто пишу.
Cyrix вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать кнопку СТОП и ПАУЗА??? PhotoShoper Мультимедиа в Delphi 3 11.05.2011 17:14
Пауза/продолжить поток TThread одной кнопкой Человек_Борща Общие вопросы Delphi 3 29.10.2010 00:55
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
Стоп Obey177 Общие вопросы Delphi 22 05.09.2010 19:56
Стоп IDhttp KoBRaAndrey Работа с сетью в Delphi 0 30.04.2010 21:28