Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убивает ли поток породивший его процесс? Наверное ликбез 
V
    Опции темы
zalex
Дата 6.4.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



Привет всем!
Есть приложение, которое создаёт свой поток, например
Код

MyThread:=TMyThread.Create(True);


Вопрос в следующем - если при работающем потоке закрыть приложение, то что будет с потоком?
Сам проверял, что MyThread.Destroy не выполнгяется, но в Ctrl+Alt+Del всякий раз вижу, что число потоков до запуска моего приложения и после нетзменно .
В общем если кто знает - что с таким потоком происходит, и если он всё же убивается, то по какому механизму?

PM MAIL   Вверх
Romikgy
Дата 6.4.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



убиваться , аналогично как ты в таск манагере убиваешь процесс, также здесь поток убивается, без заходов в любые секции


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Guedda
Дата 6.4.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Если включен FreeOnTerminate, то освобожается при выгрузки из памяти программы. Аесли false, то должно до конца цикла выполниться, а потом уже выгрузиться... На это время (пока поток не выполнится), программа виснет.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Snowy
Дата 6.4.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Поток завершается аварийно.
Никакого корректного завершения нет - просто начильно уничтожается.
PM MAIL   Вверх
_hunter
Дата 6.4.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



что-то вы все не то прочитали.
при закрытии процесса система освобождает все его ресурсы ( в том числе и потоки )
+ zalex, а где ты нашел счетчик потоков? в менеджере счетчик процессов...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
zalex
Дата 6.4.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



В ХР по тём пальцам есть отдельно Потоков и Процессов( или это не то?). В левой части, под диаграмкой файла подкачки.
Так, значит система освобождает ресурсы. А каким образом? Попробовал отправлять сам потоку сообщения типа WM_Quit и WM_Close (типа систему эмулировал smile) - ничего не получается.
Добавлено @ 17:05
Цитата(Romikgy @ 6.4.2006, 15:51 Найти цитируемый пост)
убиваться , аналогично как ты в таск манагере убиваешь процесс, также здесь поток убивается, без заходов в любые секции

Сорри за ламерство, что это значит? Никаких там Destroy и OnTerminate? ВУ общем не понятен в данном контексте смысл слова секции.
Добавлено @ 17:09
Цитата(Snowy @ 6.4.2006, 15:56 Найти цитируемый пост)
Поток завершается аварийно.
Никакого корректного завершения нет - просто начильно уничтожается.

То есть (сам пытаюсь понять) - освобождаются лишь связанные с потоком ресурсы, без вызовов соответствующих методов самого потока?
PM MAIL   Вверх
Демо
Дата 6.4.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



zalex,
Основное окно получает сообщение WM_CLOSE.
Если обработчик этого сообщения не переопределен(нет кода для завершения дополнительных потоков), то для всех потоков вызывается TerminateThread.
Добавлено @ 17:21
Цитата(zalex @ 6.4.2006, 17:03 Найти цитируемый пост)
То есть (сам пытаюсь понять) - освобождаются лишь связанные с потоком ресурсы, без вызовов соответствующих методов самого потока?


Освобождаются все ресурсы. Но только лишь потому, что завершается приложение. Естественно, никаких методов потока вызвано не будет.
Добавлено @ 17:23
Кстати, я бы сказал не поток, а нить. Кроме этого нить и класс TThread - не тождественные вещи.

Это сообщение отредактировал(а) Демо - 6.4.2006, 17:18


--------------------
    
PM MAIL ICQ Skype   Вверх
zalex
Дата 6.4.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



Цитата(Демо @ 6.4.2006, 17:13 Найти цитируемый пост)
Если обработчик этого сообщения не переопределен(нет кода для завершения дополнительных потоков), то для всех потоков вызывается TerminateThread.


Вопрос решен. А вообще smile ткните безграмотного носом туда, где об этом можно почитать поподробнее.

PM MAIL   Вверх
Демо
Дата 6.4.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50





--------------------
    
PM MAIL ICQ Skype   Вверх
zalex
Дата 6.4.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



Большое спасибо! Очень полезные ссылки.
Вот только один вопросик остался;) Как узнать в программе - существует ли мой поток еще или нет (закончился и терминировался). в приведенных статьях я нашел только путем введения сторонней переменной. А без неё никак нельзя?
PM MAIL   Вверх
_hunter
Дата 6.4.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



если под сторонней переменной понимает hThread -- никак


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Демо
Дата 6.4.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(zalex @ 6.4.2006, 18:30 Найти цитируемый пост)
А без неё никак нельзя?


Можно, если нить будет организована нужным способом.
Опять же зависит от того, VCL-обертка или API-Thread.


--------------------
    
PM MAIL ICQ Skype   Вверх
zalex
Дата 6.4.2006, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



Цитата(_hunter @ 6.4.2006, 18:53 Найти цитируемый пост)
если под сторонней переменной понимает hThread -- никак

Нет, там вообще левая переменная вводилась, значение которой изменялось в потоке. Когда поток завершался - соответствующее значение присваивал этой переменной. А потом основная прога смотрела на эту переменную и принимала решение - жив поток или нет.
Цитата(Демо @ 6.4.2006, 19:19 Найти цитируемый пост)
Опять же зависит от того, VCL-обертка или API-Thread.

Потомок класса TThread.

Тут вот еще над чем загнался по-пути smile
Есть указатель на поток, например
Код

MyThread:=TMyThread.Create(true)

Как прописать деструктор или какие нить другие _методы_ класса TMyThread, что бы после уничтожения экземпляра указатель MyThread был равен nil. Через Self ничего не выходит, и вопрос оказался для меня нетривиальным. Подскажите плиз.


PM MAIL   Вверх
Демо
Дата 6.4.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Код

type
  TThr=class(TThread)
  end;

  TForm1=class(TForm)
  public
    procedure OnTerminate(Sender: TObject)
  end;

var
  MyThread: TThr;

implementation

procedure TForm1.OnTerminate(Sender: TObject);
begin
  MyThread := nil;
end;


...

MyThread := TThr.Create;






--------------------
    
PM MAIL ICQ Skype   Вверх
zalex
Дата 6.4.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: 2
Всего: 2



smile Вот ведь я какой капризный.
У меня не получается запись nil'а в методах именно _потока_, а не формы. Т.е. я хочу реализовать полностью самостоятельный поток, о котором форме нужно знать только его класс, а всё остальное лн делает сам - и контролами управляет и т.д. Вроде всё получилось, кроме этого nil.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.