После закрытия приложения, висит в процессах (dll)
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Полимат
- Сообщения: 1810
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 24 раза
- Поблагодарили: 10 раз
После закрытия приложения, висит в процессах (dll)
После того как app пересобрал из локального в dll, заметил, что программа не всегда закрывается полностью, вернее закрывается, но продолжает висеть в процессах. Прошу Вашей помощи.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Игорь Столяров
- Ветеран движения
- Сообщения: 8032
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
После закрытия приложения, висит в процессах (dll)
Бывает.
Скорее всего есть причины по которым подвисает выгрузка какого-то DLL из памяти.
1. Диагностируем проблемный DLL. В основном файле программы (MySoft.clw) ставим проверку выгрузки:
2. Вычислив проблемную DLL идем в ее метод Kill(), ставим аналогичные Checkpoin и смотрим, на каком этапе зависает.
3. Разбираемся с проблемой и устраняем ее.
По опыту могу сказать, что проблема наиболее вероятна в нарушении порядка вызовов Init() / Kill() сторонних методов
или некорректной работой с компонентами OCX из DLL.

1. Диагностируем проблемный DLL. В основном файле программы (MySoft.clw) ставим проверку выгрузки:
Код: Выделить всё
...
mydll3:Init(GlobalErrors, INIMgr) ! Initialise dll (ABC)
mydll2:Init(GlobalErrors, INIMgr) ! Initialise dll (ABC)
mydll1:Init(GlobalErrors, INIMgr) ! Initialise dll (ABC)
StartSoft
Message('Программа закрыта')
INIMgr.Update
Message('INIMgr успешно обновлен')
mydll1:Kill() ! Kill dll (ABC)
Message('MyDLL1 выгружена')
mydll2:Kill() ! Kill dll (ABC)
Message('MyDLL2 выгружена')
mydll3:Kill() ! Kill dll (ABC)
Message('MyDLL3 выгружена')
...
3. Разбираемся с проблемой и устраняем ее.
По опыту могу сказать, что проблема наиболее вероятна в нарушении порядка вызовов Init() / Kill() сторонних методов
или некорректной работой с компонентами OCX из DLL.
Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
После закрытия приложения, висит в процессах (dll)
У нас такое постоянно, но на сервере (виртуальном). Причём вообще непонятно, может exe-шник остаться в памяти, может любая dll. Совершенно не зависит от версии Клариона. На локальной машине такого не наблюдается. Поэтому грешим на сервер.
We are hard at work… for you. 

-
- Полимат
- Сообщения: 1810
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 24 раза
- Поблагодарили: 10 раз
После закрытия приложения, висит в процессах (dll)
У меня на локальной машине.kreator писал(а):На локальной машине такого не наблюдается. Поэтому грешим на сервер.
Спасибо за помощь, проверил, все сообщения проходят, а exe виситИгорь Столяров писал(а):1. Диагностируем проблемный DLL. В основном файле программы (MySoft.clw) ставим проверку выгрузки:

“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
После закрытия приложения, висит в процессах (dll)
А зайди в "Панель управления->Администрирование->Управление компьютером->Открытые файлы", посмотри все dll-ки висят, или не все.
We are hard at work… for you. 

-
- Полимат
- Сообщения: 1810
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 24 раза
- Поблагодарили: 10 раз
После закрытия приложения, висит в процессах (dll)
проблема оказалось банальна
, привычка закрывать приложение с помощью крестика в правом углу, не закрыв открытое в приложении mdi окно в локальной версии-один exe файл проходило без проблем, но такое закрытие не корректно в dll сборки программы
, и приложение не закрывалось


“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
После закрытия приложения, висит в процессах (dll)
Спорить не буду, но не научно это. Нажатие на крестик - это есть нормальный выход из программы. Что ещё нужно сделать для закрытия? Специально проверил у себя - всё нормально с нажатием на крестик. Правда у меня везде используется расширение "CleanCloseDownGlobal", но, думаю, оно не причём, оно работает в случае ухода операционки на перезагрузку или выключение.
We are hard at work… for you. 

-
- Полимат
- Сообщения: 1810
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 24 раза
- Поблагодарили: 10 раз
После закрытия приложения, висит в процессах (dll)
ABCFree ? Очистка без очистки в Preserve в ini?kreator писал(а):Правда у меня везде используется расширение "CleanCloseDownGlobal"
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
После закрытия приложения, висит в процессах (dll)
Обычный Global Extension. Правильно закрывает окна и само приложение в случае ухода операционки на перезагрузку. Иначе Винда сообщает - "Не могу перезагрузиться, запущена программа Имярек".
We are hard at work… for you. 

После закрытия приложения, висит в процессах (dll)
Отличительной чертой dll-проектов является рекомендация SV не употреблять в них команду HALT (см. help по команде). Проверьте у себя, что все команды HALT у вас в проекте закомментированы или заменены на что-нибудь эквивалентное (RETURN(1) например).
Может быть дело в этом?
Может быть дело в этом?
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
После закрытия приложения, висит в процессах (dll)
В куче проектов использую HALT для выгрузки всех копий приложений у всех юзеров по флагу. Прекрасно работает и убивает программы.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
После закрытия приложения, висит в процессах (dll)
Но рекомендация не использовать HALT есть. Есть, кстати, и рекомендация использовать CleanCloseDown. Я тоже не встречал проблем с HALT, может потому, что использую CleanCloseDown.Admin писал(а):В куче проектов использую HALT для выгрузки всех копий приложений у всех юзеров по флагу. Прекрасно работает и убивает программы.
We are hard at work… for you. 

После закрытия приложения, висит в процессах (dll)
Не ругайтесь, тем более, что у меня такой кейз был. На то она и рекомендация. Иначе был бы запрет.
Гипотезу всё же лучше проверить.

Гипотезу всё же лучше проверить.
- Игорь Столяров
- Ветеран движения
- Сообщения: 8032
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
После закрытия приложения, висит в процессах (dll)
Вообще, конечно жесть рубить работу приложения в произвольном месте.
Открыты файлы, возможно часть данных в буферах, выделена память ...

У нас в программах нет ни одного оператора HALT.
Как узнал сегодня - это еще и рекомендация SV. Вполне разумная.

Make Clarion Great Again ! 
-
- ✯ Ветеран ✯
- Сообщения: 5161
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
После закрытия приложения, висит в процессах (dll)
Рекомендация касается только режима Multi-dll, предлагается альтернатива - CleanCloseDown. Всё. Видимо Halt'у наплевать на другие dll-ки проекта.Игорь Столяров писал(а):Как узнал сегодня - это еще и рекомендация SV. Вполне разумная.
We are hard at work… for you. 
