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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2012, 20:41   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию TTHread, Как перезапустить поток, без его уничтожения?

Доброго времени!

Имеется TUpdateTHread наследник TThread.

Идея в том, чтобы поток создавался при создании окна, и уничтожался при разрушении оной.

При этом было воможно с потоком следующее:
1. Запустить его
2. Перезапустить
3. Поставить на паузу.


Как быть?
Человек_Борща вне форума Ответить с цитированием
Старый 17.08.2012, 21:03   #2
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Можно сделать его компонентом. При создании окна будет создаваться компонент. С закрытием аналогично и вопросов не должно возникать.
С перезапуском проблемы. Можно после каждого оператора ставить проверку какого-нибудь значения. Если истина, то использовать например jump. Но это извращение, имхо.
А разве нет функций выполняющих это? На остановку точно была.
Kix.IV вне форума Ответить с цитированием
Старый 17.08.2012, 21:05   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

глупо, мне нужно упревление потоком. Обьект контролирующий поток уже есть, зачем мне делать его компонентом?

Есть Terminate, но поток останавливается полностью, но не перезапускается таким образом.
Человек_Борща вне форума Ответить с цитированием
Старый 17.08.2012, 21:08   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Чем Suspend и Resume не подходят для паузы и рестарта?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.08.2012, 21:09   #5
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Пауза/Play:
Код:
Thread.Suspended:=not Thread.Suspended;
Перезапуск:
Код:
type
TUpdateTHread=class(TThread)
...
needrest:boolean;
.....
    Protected 
      Procedure Execute; override;
  Public 
    Constructor Create(CreateSuspended: boolean); 
 destructor Destroy; override;
  end;

....
constructor TUpdateTHread.Create(CreateSuspended: boolean);
begin
  inherited Create(CreateSuspended); 
needrest:=false;
end;
....
procedure TUpdateTHread.Execute;
var
label
  GotoLabel;
begin
GotoLabel:
....
if needrest then Goto GotoLabel;
....
end;
Thread.needrest;
как то так...
Кольша вне форума Ответить с цитированием
Старый 17.08.2012, 21:13   #6
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Кольша, именно это я имел в виду.
Человек_Борща, тогда создавай на OnCreate формы и уничтажай на OnDestroy. Это же логично.
Аватар, а как с помощью resume и suspend перезапустить?
Kix.IV вне форума Ответить с цитированием
Старый 17.08.2012, 21:15   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Аватар, а как с помощью resume и suspend перезапустить?
Перезапустить ни как, а сделать паузу и продолжить работу после паузы аж бегом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.08.2012, 21:16   #8
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

да я просто не успел написать вы меня опередили
Кольша вне форума Ответить с цитированием
Старый 17.08.2012, 21:18   #9
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

А можно изменить в потоке регистр CS:IP(кажись так называется)?
Kix.IV вне форума Ответить с цитированием
Старый 17.08.2012, 21:25   #10
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Кажется функция SetThreadContext может менять регистры. Копай в эту сторону.
Если найдёшь, то отпишись пожалуйста. Стало интересно.
Kix.IV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл на сайте и как узнать его modified без скачивания его celovec Работа с сетью в Delphi 2 06.09.2011 16:30
Если остановился поток (TThread). Как перезапустить без потери памяти Zuzlan Общие вопросы Delphi 9 01.02.2011 13:57
Как оповестить основной поток о каком-то событии в потоке (TThread)? TwiX Общие вопросы Delphi 2 11.02.2010 02:57
Отобразить рабочий поток (TThread) NervniiJ Общие вопросы Delphi 0 10.01.2010 17:34
Проверка объекта после его уничтожения AHTuKiLLeR Общие вопросы Delphi 1 19.06.2009 10:43