|
63 / 62 / 11
Регистрация: 28.12.2011
Сообщений: 280
|
||||||
Завершение потоков, после закрытия формы30.08.2012, 19:21. Показов 25731. Ответов 18
Метки нет (Все метки)
После закрытия формы в процессах продолжает висеть процесс.
Я так понимаю вот этот поток не закрывается.
1
|
||||||
| 30.08.2012, 19:21 | |
|
Ответы с готовыми решениями:
18
Обновление формы после закрытия Появление новой формы после закрытия предыдущей |
|
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
|
|
| 30.08.2012, 20:03 | |
|
Смотрите события FormClosed, FormClosing
0
|
|
|
20 / 20 / 2
Регистрация: 27.09.2011
Сообщений: 155
|
||||||
| 31.08.2012, 11:48 | ||||||
|
была у меня такая "шляпа". так и не разобрался в чём дело, просто повесил на закрытие формы
Добавлено через 1 минуту кстати пустой catch не комильфо.
7
|
||||||
|
146 / 143 / 11
Регистрация: 11.09.2011
Сообщений: 419
|
||||||
| 31.08.2012, 12:56 | ||||||
|
если есть доступная во всех методах ссылка на тред:
0
|
||||||
|
63 / 62 / 11
Регистрация: 28.12.2011
Сообщений: 280
|
|
| 01.09.2012, 00:34 [ТС] | |
|
всем спасибо, вроде бы ничего не делал но проблема сама пропала...
0
|
|
|
0 / 0 / 0
Регистрация: 30.03.2017
Сообщений: 3
|
|
| 01.02.2014, 21:49 | |
|
INF1NUM, спасибо, действительно помогает
0
|
|
| 02.02.2014, 11:15 | |
|
Good1101, при работе с Thread не забывайте выставлять свойство IsBackground в true и таких проблем не будет.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 02.02.2014, 16:02 | |
|
Неужели только у меня возникает чувство дискомфорта от завершения работы программы методом "а гори оно всё синим пламенем"?
Это я про принудительное завершение приложения, аборт потока или предоставление потока рантайму на уничтожение по своему усмотрению. Под рукой же имеется все что нужно для нормального завершения работы: при закрытии приложения выставляем флаг client_running на false, закрываем сокет client и вызываем Join на потоке th. Если сокет заблочен из-за чтения, то он бросает исключение при вызове Receive (исключение ловим и пишем в лог, что сокет закрыт), потом переходит на следующую итерацию, в которой не проходит условие client_running, после чего работа потока благополучно завершается. Все счастливы, дзен достигнут. И нет необходимости стрелять себе в голову, когда пора идти спать.
1
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 02.02.2014, 16:16 | |||
|
Однако, лучше "с детства" приучаться к опрятности ![]() Но при штатном завершении работу все-таки нужно заканчивать нормально.
1
|
|||
| 02.02.2014, 16:25 | ||
|
Добавлено через 5 минут При этом что такое штатное завершение? А если у меня куча сборок, которые используются в моем проекте и там используются потоки, мне что каждый раз передавать флаг завершения через всю иерархию классов?
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||
| 02.02.2014, 17:15 | |||||
Сообщение было отмечено как решение
Решение![]() А вот если процесс повис в памяти, то это очень хорошее напоминание, что в коде косяк, и это напоминание позволит обнаружить и пофиксить этот косяк еще на стадии тестирования, а не приводить потом к undefined behavior на клиентской системе. Спрашиваю без издевки, просто чтобы зря не расписывать ответ на вопрос, на который ответа не ожидается. Задача разработчика, использующего стороннюю сборку, дать сигнал ее компонентам о завершении работы, например используя паттерн Disposable. Задача разработчка, предоставляющего стороннюю сборку, предоставить интерфейс для корректного завершения ее компонентов, если таковой интерфейс необходим. Вы отсигналили, а класс той сборки уже сам своим потокам выставил нужные флаги. И так по цепочке. Используется много разных классов и в итоге завершение работы занимает некоторое время? Ну что ж, система значит сложная — бывает. Покажите пользователю плашку (можете с прогрессом) о том, что работа приложения завершается — подождите немножко, пожалуйста. Виндуз вон, при каждом завершении это окно показывает и ничего, практически никто не жалуется. Исключение — необходимость внедрить хак, когда разработчик какой-либо сборки не предоставил интерфейса для завершения работы ее классов и нет возможности связаться с разработчиком или заменить сборку на хорошую, годную. Но чтобы не возникало необходимости в хаках, в том числе и кому-то из-за вас ("вы" в данном контексте — не конкретно Вы, а некий гипотетический разраб), я выше и написал про приучение себя к опрятности "с детства". Погадил — будь добр, прибери за собой.
4
|
|||||
| 02.02.2014, 17:34 | ||||
|
А если вызывается статический метод и там создается поток? Я считаю, что если разработчик использует поток, то он должен либо предоставить пользователю отменить операции идущую в потоке, любо выставить флаг завершения потока вместе с процессом. А не то получится, я же реализовал IDisposable, что же ты не использовал using.
0
|
||||
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
|
| 02.02.2014, 18:54 | |
|
0
|
|
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 02.02.2014, 22:01 | |
|
kolorotur, к сожалению, у большинства разработчиков отсутствуют инклудья, дающие способность понять необходимость писать аккуратно. Наша профессия вырождается, как выродилась в автослесарей профессия специалистов по двигателям. Культура производства в сфере ПО уже не востребована, как минимум вопрошающими здесь. Всё чаще прихожу к такому мнению.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||
| 03.02.2014, 16:18 | ||||||||
|
Я ведь и говорю именно о разнице в подходе "отменить перед выходом" и "да пошло оно всё...". Я о том, что меня коробит, когда программист даже не пытается нормально отменить параллельную операцию перед выходом. Можно использовать любой удобный механизм, но механизм присутствовать должен. Банально для управления лайфтаймом объекта. А то объект заспавнил поток, сам при этом сдох, потому что больше не нужен, а поток продолжает что-то делать. Вот у автора в коде предоставлена прекрасная возможность при выходе красиво отменить операцию, идущую в потоке. Эту возможность я описал в первом своем сообщении. Я ж ворчу о том, что этой возможностью никто не воспользовался, почему-то все предложения были из серии либо убей, либо забей — само, мол, отвалится.
1
|
||||||||
|
63 / 62 / 11
Регистрация: 28.12.2011
Сообщений: 280
|
|
| 12.02.2014, 22:11 [ТС] | |
|
Всем спасибо конечно, но прошло уже полтора года с того момента как меня интересовал данный вопрос)
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 13.02.2014, 11:33 | |
|
Good1101, это ж проблема из серии вечных, она никогда не стареет
0
|
|
|
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|
| 13.02.2014, 11:41 | |
|
Good1101, неправильно написан код работы лисенера
0
|
|
| 13.02.2014, 11:41 | |
|
Помогаю со студенческими работами здесь
19
Выполнение некоторого действия после закрытия формы Обновление label в первой формы после закрытия второй Почему после закрытия второй формы главная не появляется?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|