После закрытия приложения, висит в процессах (dll)

Clarion, Clarion 7

Модератор: Дед Пахом

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

После закрытия приложения, висит в процессах (dll)

Сообщение gopstop2007 »

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

После закрытия приложения, висит в процессах (dll)

Сообщение Игорь Столяров »

Бывает.;) Скорее всего есть причины по которым подвисает выгрузка какого-то 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 выгружена')
  ...
2. Вычислив проблемную DLL идем в ее метод Kill(), ставим аналогичные Checkpoin и смотрим, на каком этапе зависает.
3. Разбираемся с проблемой и устраняем ее.

По опыту могу сказать, что проблема наиболее вероятна в нарушении порядка вызовов Init() / Kill() сторонних методов
или некорректной работой с компонентами OCX из DLL.
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

После закрытия приложения, висит в процессах (dll)

Сообщение kreator »

У нас такое постоянно, но на сервере (виртуальном). Причём вообще непонятно, может exe-шник остаться в памяти, может любая dll. Совершенно не зависит от версии Клариона. На локальной машине такого не наблюдается. Поэтому грешим на сервер.
We are hard at work… for you. :)
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

После закрытия приложения, висит в процессах (dll)

Сообщение gopstop2007 »

kreator писал(а):На локальной машине такого не наблюдается. Поэтому грешим на сервер.
У меня на локальной машине.
Игорь Столяров писал(а):1. Диагностируем проблемный DLL. В основном файле программы (MySoft.clw) ставим проверку выгрузки:
Спасибо за помощь, проверил, все сообщения проходят, а exe висит :shock:
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

После закрытия приложения, висит в процессах (dll)

Сообщение kreator »

А зайди в "Панель управления->Администрирование->Управление компьютером->Открытые файлы", посмотри все dll-ки висят, или не все.
We are hard at work… for you. :)
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

После закрытия приложения, висит в процессах (dll)

Сообщение gopstop2007 »

проблема оказалось банальна :( , привычка закрывать приложение с помощью крестика в правом углу, не закрыв открытое в приложении mdi окно в локальной версии-один exe файл проходило без проблем, но такое закрытие не корректно в dll сборки программы :idied:, и приложение не закрывалось
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

После закрытия приложения, висит в процессах (dll)

Сообщение kreator »

Спорить не буду, но не научно это. Нажатие на крестик - это есть нормальный выход из программы. Что ещё нужно сделать для закрытия? Специально проверил у себя - всё нормально с нажатием на крестик. Правда у меня везде используется расширение "CleanCloseDownGlobal", но, думаю, оно не причём, оно работает в случае ухода операционки на перезагрузку или выключение.
We are hard at work… for you. :)
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

После закрытия приложения, висит в процессах (dll)

Сообщение gopstop2007 »

kreator писал(а):Правда у меня везде используется расширение "CleanCloseDownGlobal"
ABCFree ? Очистка без очистки в Preserve в ini?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

После закрытия приложения, висит в процессах (dll)

Сообщение kreator »

Обычный Global Extension. Правильно закрывает окна и само приложение в случае ухода операционки на перезагрузку. Иначе Винда сообщает - "Не могу перезагрузиться, запущена программа Имярек".
We are hard at work… for you. :)
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

После закрытия приложения, висит в процессах (dll)

Сообщение Shur »

Отличительной чертой dll-проектов является рекомендация SV не употреблять в них команду HALT (см. help по команде). Проверьте у себя, что все команды HALT у вас в проекте закомментированы или заменены на что-нибудь эквивалентное (RETURN(1) например).
Может быть дело в этом?
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

После закрытия приложения, висит в процессах (dll)

Сообщение Admin »

Shur писал(а): рекомендация SV не употреблять в них команду HALT
В куче проектов использую HALT для выгрузки всех копий приложений у всех юзеров по флагу. Прекрасно работает и убивает программы.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

После закрытия приложения, висит в процессах (dll)

Сообщение kreator »

Admin писал(а):В куче проектов использую HALT для выгрузки всех копий приложений у всех юзеров по флагу. Прекрасно работает и убивает программы.
Но рекомендация не использовать HALT есть. Есть, кстати, и рекомендация использовать CleanCloseDown. Я тоже не встречал проблем с HALT, может потому, что использую CleanCloseDown.
We are hard at work… for you. :)
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

После закрытия приложения, висит в процессах (dll)

Сообщение Shur »

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

После закрытия приложения, висит в процессах (dll)

Сообщение Игорь Столяров »

Admin писал(а): В куче проектов использую HALT для выгрузки всех копий приложений у всех юзеров по флагу. Прекрасно работает и убивает программы.
Вообще, конечно жесть рубить работу приложения в произвольном месте.
Открыты файлы, возможно часть данных в буферах, выделена память ... :(
У нас в программах нет ни одного оператора HALT.
Как узнал сегодня - это еще и рекомендация SV. Вполне разумная. ;)
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

После закрытия приложения, висит в процессах (dll)

Сообщение kreator »

Игорь Столяров писал(а):Как узнал сегодня - это еще и рекомендация SV. Вполне разумная. ;)
Рекомендация касается только режима Multi-dll, предлагается альтернатива - CleanCloseDown. Всё. Видимо Halt'у наплевать на другие dll-ки проекта.
We are hard at work… for you. :)
Ответить