![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
Привет всем!
Есть приложение, которое создаёт свой поток, например
Вопрос в следующем - если при работающем потоке закрыть приложение, то что будет с потоком? Сам проверял, что MyThread.Destroy не выполнгяется, но в Ctrl+Alt+Del всякий раз вижу, что число потоков до запуска моего приложения и после нетзменно . В общем если кто знает - что с таким потоком происходит, и если он всё же убивается, то по какому механизму? |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
убиваться , аналогично как ты в таск манагере убиваешь процесс, также здесь поток убивается, без заходов в любые секции
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Если включен FreeOnTerminate, то освобожается при выгрузки из памяти программы. Аесли false, то должно до конца цикла выполниться, а потом уже выгрузиться... На это время (пока поток не выполнится), программа виснет.
-------------------- Ll 2 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Поток завершается аварийно.
Никакого корректного завершения нет - просто начильно уничтожается. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
что-то вы все не то прочитали.
при закрытии процесса система освобождает все его ресурсы ( в том числе и потоки ) + zalex, а где ты нашел счетчик потоков? в менеджере счетчик процессов... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| zalex |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
В ХР по тём пальцам есть отдельно Потоков и Процессов( или это не то?). В левой части, под диаграмкой файла подкачки.
Так, значит система освобождает ресурсы. А каким образом? Попробовал отправлять сам потоку сообщения типа WM_Quit и WM_Close (типа систему эмулировал Добавлено @ 17:05
Сорри за ламерство, что это значит? Никаких там Destroy и OnTerminate? ВУ общем не понятен в данном контексте смысл слова секции. Добавлено @ 17:09
То есть (сам пытаюсь понять) - освобождаются лишь связанные с потоком ресурсы, без вызовов соответствующих методов самого потока? |
||||
|
|||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
zalex,
Основное окно получает сообщение WM_CLOSE. Если обработчик этого сообщения не переопределен(нет кода для завершения дополнительных потоков), то для всех потоков вызывается TerminateThread. Добавлено @ 17:21
Освобождаются все ресурсы. Но только лишь потому, что завершается приложение. Естественно, никаких методов потока вызвано не будет. Добавлено @ 17:23 Кстати, я бы сказал не поток, а нить. Кроме этого нить и класс TThread - не тождественные вещи. Это сообщение отредактировал(а) Демо - 6.4.2006, 17:18 -------------------- |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
||||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
О потоках(нитях) вообще?
http://forum.vingrad.ru/index.php?showtopic=60076 http://www.delphimaster.ru/articles/panov/index.html -------------------- |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
Большое спасибо! Очень полезные ссылки.
Вот только один вопросик остался;) Как узнать в программе - существует ли мой поток еще или нет (закончился и терминировался). в приведенных статьях я нашел только путем введения сторонней переменной. А без неё никак нельзя? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
если под сторонней переменной понимает hThread -- никак
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Можно, если нить будет организована нужным способом. Опять же зависит от того, VCL-обертка или API-Thread. -------------------- |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
Нет, там вообще левая переменная вводилась, значение которой изменялось в потоке. Когда поток завершался - соответствующее значение присваивал этой переменной. А потом основная прога смотрела на эту переменную и принимала решение - жив поток или нет. Потомок класса TThread. Тут вот еще над чем загнался по-пути Есть указатель на поток, например
Как прописать деструктор или какие нить другие _методы_ класса TMyThread, что бы после уничтожения экземпляра указатель MyThread был равен nil. Через Self ничего не выходит, и вопрос оказался для меня нетривиальным. Подскажите плиз. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
-------------------- |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
У меня не получается запись nil'а в методах именно _потока_, а не формы. Т.е. я хочу реализовать полностью самостоятельный поток, о котором форме нужно знать только его класс, а всё остальное лн делает сам - и контролами управляет и т.д. Вроде всё получилось, кроме этого nil. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |