Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Всем добрый день, при старте программы надо создать объект который после создания, параллельно старту программы, выполнит определённые действия и по завершению самоуничтожится. Напрашивается идея создания thread, но как обеспечить его самоуничтожение? Наследовать интерфейс? но при выходе из процедуры где он создаётся он начнёт уничтожаться, не факт что при этом он закончит свою работу, соотв. получим исключение. Подскажите идею как лучше реализовать такой объект. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 15:19 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
автори по завершению самоуничтожится. По завершению ЧЕГО ? Программы или собственных действий ? авторНапрашивается идея создания thread, но как обеспечить его самоуничтожение FreeOnTerminate ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 15:25 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
thread - FreeOnTerminate object - создал там где захочешь, уничтожил там где захочешь. В смысле не факт что при этом он закончит свою работу , без доп. потоков ты дальше не двинешься, пока он не закончит свою работу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 15:31 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
hlopotunкак лучше реализовать такой объект. Код: sql 1. 2. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 15:31 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
по завершению собственных действий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 15:34 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
TThread.CreateAnonymousThread(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 15:36 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov hlopotunкак лучше реализовать такой объект. Код: sql 1. 2. Опасно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 15:59 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Barmaley57 Dimitry Sibiryakov ..... в случае завершения программы до завершения потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 16:50 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
память может утечь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 16:51 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
16.03.2021 16:51, Barmaley57 пишет: > память может утечь завершившемуся процессу это фиолетово. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 16:55 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
в этом проекте вообще следят за утечками (FastMM, ReportMemoryLeaksOnShutdown итп). Кстати, FastMM распознает уничтожение такого обьекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 17:23 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
hlopotun FastMM распознает уничтожение такого обьекта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 17:27 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
И сразу связанный вопрос. По итогам работы thread в конце надо показать форму поверх приложения. Форму можно запустить асинхронно, сам процесс после этого можно завершить. Но форма должна быть кликабельной. По сути это форма с сообщением что есть новая версия программы, с кнопкой перехода по адресу в сети для скачивания новой версии и чекбоксом больше не показывать эту форму. А в треаде происходит проверка наличия новой версии программы в сети. Знаю что есть проблемы с vcl формами при их запуске из Thread но в этом случае форму нужно только асинхронно запустить а сам thread пусть закрывается. thread в этом случае нужен только для того что бы в фоне выяскить наличие новой версии. Я вот думаю, не будет ли лучшим решением в таком случае запустить невидимую mdi форму и если надо что то показать пусть она сама себя покажет, а если нет, сама себя завершит. Выглядит проще, и ненадо заморачиваться с thread итп И опять же не будет останавливать программу при старте во время проверки наличия новой версии по сети. По сути задача сводится к фоновой проверке при старте программы наличия новой версии и если новая версия есть показать в конце форму. Какой вариант на Ваш взгляд тут подходит больше? с thread или просто с mdi формой? или третий какой либо вариант? Наверное выделю в новую тему . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 18:53 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
hlopotun ... По итогам работы thread в конце надо показать форму поверх приложения. Форму можно запустить асинхронно, сам процесс после этого можно завершить. Но форма должна быть кликабельной. По сути это форма с сообщением что есть новая версия программы, с кнопкой перехода по адресу в сети для скачивания новой версии и чекбоксом больше не показывать эту форму. А в треаде происходит проверка наличия новой версии программы в сети. Знаю что есть проблемы с vcl формами при их запуске из Thread но в этом случае форму нужно только асинхронно запустить а сам thread пусть закрывается. ... Можете почитать про потоки вот это: https://www.sql.ru/forum/1327144/mnogopotochnoe-programmirovanie-v-delphi-dlya-nachinaushhih А если коротко, то можете послать из потока главной форме сообщение через PostMessage, где сообщить, есть обновление или нет, а обработчик сообщения в главной форме уже может запустить форму "поверх приложения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 19:04 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
hlopotun, Создаёте главную форму, запускаете из неё поток проверки новой версии, когда поток отработает, он должен прислать главной форме сообщение с результатом проверки и завершиться. Главная форма, получив сообщение, создаёт форму с предложением обновиться и показывает её юзеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 19:04 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Почему нельзя просто из только что запустившейся MyApp.exe запустить MyAppUpdater.exe? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 19:43 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
zedxxx hlopotun, Создаёте главную форму, запускаете из неё поток проверки новой версии, когда поток отработает, он должен прислать главной форме сообщение с результатом проверки и завершиться. Главная форма, получив сообщение, создаёт форму с предложением обновиться и показывает её юзеру. Основное Приложение при запуске просто запускаем приложение Обновлятор, и работает дальше. Обновлятор проверяет, есть ли обновления, если есть - скачивает их во Временное Хранилище. По завершении скачивания, переносит обновления из Временного Хранилища в папку Загрузки и завершает свою работу. Основное приложение, при следующем запуске, обнаружив, что папку Загрузки не пуста, выполняет действия по обновлению, удаляет содержимое папки Загрузки, запускает Обновлятор и работает дальше. ...таким образом, обновления скачиваться даже тогда, когда Основное Приложение завершило работу. Более того, запуск Обновлятора можно делать по расписанию или при запуске ОС. Нафига вам эти треды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2021, 21:48 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
zedxxx Создаёте главную форму, запускаете из неё поток Потоку не нужна главная форма. Точнее вообще формы ему не нужны. При этом форма может долго создаваться. Проще запустить поток до создания каких-либо форм. Поток после себя оставит либо сообщение в очереди формы, либо переменную с результатом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2021, 09:15 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Основное Приложение при запуске просто запускаем приложение Обновлятор, и работает дальше. Обновлятор проверяет, есть ли обновления, если есть - скачивает их во Временное Хранилище. По завершении скачивания, переносит обновления из Временного Хранилища в папку Загрузки и завершает свою работу. Основное приложение, при следующем запуске, обнаружив, что папку Загрузки не пуста, выполняет действия по обновлению, удаляет содержимое папки Загрузки, запускает Обновлятор и работает дальше. ...таким образом, обновления скачиваться даже тогда, когда Основное Приложение завершило работу. Более того, запуск Обновлятора можно делать по расписанию или при запуске ОС. Нафига вам эти треды. А при должной сноровке Обновлятор и Основное приложение может быть один и тот же экзешник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2021, 09:57 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
zedxxx, в .dpr до создания всех форм можно делать сделать что угодно. и конечно же всё будет работать. и потоков создать и проверить/перезапуститься и т.п ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2021, 10:49 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal А при должной сноровке Обновлятор и Основное приложение может быть один и тот же экзешник Можно, конечно, но, ИМХО, сие подобно стремлению во что бы то ни стало избавляться от dll's. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2021, 01:22 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
hlopotun, обычный поток создаёшь Код: pascal 1. 2. в конце Execute Код: pascal 1. 2. 3. в финализации модуля Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2021, 09:08 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov hlopotunкак лучше реализовать такой объект. Код: sql 1. 2. если подобным образом запустить thread и пользователь был достаточно быстр и сразу закрыл приложение после запуска а процесс ещё не завершился вываливается исключение. Есть ли возможность в таком процессе отработать закрытие формы (например не дать её закрыть, или прибить сам процесс не вызывая исключение)? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2021, 17:42 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
похоже, тут программист нужен... (С) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2021, 17:53 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov hlopotunкак лучше реализовать такой объект. Код: sql 1. 2. По собственному опыту могу сказать, что так делать не нужно. В наших программах было несколько мест, где старт потоков выполнялся в секции initialization. Иногда (один раз из 100) при запуске программ возникали различные странные ошибки, зачастую процесс тут же вырубался. Долго разбирались. Оказалось, что виновник - это создание потока в секции initialization EXE-файла (про DLL даже и не говорю). После переноса в другие места (например, в OnFormCreate), программа запускается в 100% случаев. Гоняли с помощью такого батника: Код: powershell 1. 2. 3. 4. В DPR-файле Exit делали сразу после BEGIN. Перед Exit писали сообщение в лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2021, 22:37 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
DmSer Dimitry Sibiryakov пропущено... Код: sql 1. 2. По собственному опыту могу сказать, что так делать не нужно. В наших программах было несколько мест, где старт потоков выполнялся в секции initialization. Иногда (один раз из 100) при запуске программ возникали различные странные ошибки, зачастую процесс тут же вырубался. Долго разбирались. Оказалось, что виновник - это создание потока в секции initialization EXE-файла (про DLL даже и не говорю). После переноса в другие места (например, в OnFormCreate), программа запускается в 100% случаев. Гоняли с помощью такого батника: Код: powershell 1. 2. 3. 4. В DPR-файле Exit делали сразу после BEGIN. Перед Exit писали сообщение в лог. в моём случае запуск происходит в OnFormShow основной формы которая автоматом запускается при старте программы. Поток опрашивает web сервис и шлёт сообщение которое показывает маску с информацией о новой версии программы (если таковая есть). Информация о версии передаётся из web сервиса и далее в процедуру получающую сообщение через базу. Если пользователь достаточно быстро нажал закрытие программы то компоненты читающие/пишущие в из базы/в базу могут перестать существовать (по крайней мере так я понимаю выскакивающее исключение). Можно конечно анализировать перед каждым обращением к компоненту существует он ещё или нет но такое решение выглядит некрасиво т.к. теоретически компонент может ещё сушествовать а компонент с которым он работает уже быть уничтожен. Хотелось бы немедленного завершения сервиса в ситуации закрытия приложения. Какие ещё тут могут быть идеи? Отсылка сообщения процессу из OnClose основной формы? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 10:18 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
hlopotun, делаешь криво, неудобно, нелогично. Почему апдейтер должен завершаться при завершении основного приложения? Почему не задавить "проблему" в зародыше и не сделать твой апдейтер в виде отдельного процесса? Сразу исчезают перечисленные тобой "трудности" и получаешь офигенный ништяк в виде независимой от работы юзера с основным приложением. Приложение - апдейтер можно всякий раз запускать при старте приложения, можно при старте ОС. Легко отлаживать, легко изменять, легко использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 10:38 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
Не выставляйте FreeOnTerminate, никто не будет исчезать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 10:58 |
|
||
|
Самоуничтожающийся объект
|
|||
|---|---|---|---|
|
#18+
ъъъъъ hlopotun, делаешь криво, неудобно, нелогично. Почему апдейтер должен завершаться при завершении основного приложения? Почему не задавить "проблему" в зародыше и не сделать твой апдейтер в виде отдельного процесса? Сразу исчезают перечисленные тобой "трудности" и получаешь офигенный ништяк в виде независимой от работы юзера с основным приложением. Приложение - апдейтер можно всякий раз запускать при старте приложения, можно при старте ОС. Легко отлаживать, легко изменять, легко использовать. там самого обновления не происходит, только выводится информация с оссылками где почитать и где скачать. Причём в зависимости от пользователя который зашел в программу. Тётушкам из бухгалтерии ненадо ничего показывать а админу или технарю самое оно. Потому из программы (после того как пользователь введён). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2021, 11:32 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037369]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 288ms |

| 0 / 0 |
