|
Как в Dispose() узнать, что процесс и программа завершаются
|
|||
---|---|---|---|
#18+
Разработал класс с наследованием Disposable. В деструкторе класса или в методе Dispose хочу освободить неуправляемые объекты. Но освободить их нужно в зависимости от того, кто и как вызвал метод Dispose. Если программа принудительно закрывается, то мне нужно сделать Kill или Terminate в своих задачах (не важно в каких). Если же это просто пользователь решил удалить объект и продолжает работать дальше, то с освобождением ресурсов можно подождать и не делать им, условно говоря kill. Можно ли как-то отличить в Dispose принудительное завершение программы от сборщика мусора, который просто решил удалить объект за ненадобностью, но программа продолжает работать дальше. Мой класс должен быть полностью автономным и не ссылаться ни на какие другие объекты в приложении. Должен использовать только стандартные методы .NET, либо WinAPI. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 13:09 |
|
Как в Dispose() узнать, что процесс и программа завершаются
|
|||
---|---|---|---|
#18+
Вообще-то, неуправляемые ресурсы следует освобождать как можно скорее, не дожидаясь, пока сборщик мусора это сделает. Когда объект больше не нужен - вызываем Dispose. Если забыли это сделать, то GC вызовет финализатор. Вот в финализаторе и предусматриваем дополнительный код (плюс обязательно выводим в лог: "ты чудак, забыл вызвать диспоз!") Чем не устраивает стандартная реализация паттерна? И вот . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 13:51 |
|
Как в Dispose() узнать, что процесс и программа завершаются
|
|||
---|---|---|---|
#18+
ДАПKill или Terminate Эм... а при чем здесь диспоз? Килять внешние процессы... прикольно конечно... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 13:55 |
|
Как в Dispose() узнать, что процесс и программа завершаются
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 13:58 |
|
Как в Dispose() узнать, что процесс и программа завершаются
|
|||
---|---|---|---|
#18+
petalvikВообще-то, неуправляемые ресурсы следует освобождать как можно скорее, не дожидаясь, пока сборщик мусора это сделает. Когда объект больше не нужен - вызываем Dispose. Если забыли это сделать, то GC вызовет финализатор. Вот в финализаторе и предусматриваем дополнительный код (плюс обязательно выводим в лог: "ты чудак, забыл вызвать диспоз!") Чем не устраивает стандартная реализация паттерна? И вот . Он и реализован. Внешний неуправляемый ресурс вызывает callback-функцию на c#, в которой потенциально может быть что-то выведено на экран через Invoke. При завершении приложения может появиться (и появляется) deadlock. Поэтому и хочу определить, что если программа находится в состоянии завершения, то прибиваем сторонние ресурсы. Если же программа продолжает работать дальше, то спешить нам некуда, можно дождаться штатного завершения. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 15:10 |
|
Как в Dispose() узнать, что процесс и программа завершаются
|
|||
---|---|---|---|
#18+
ДАП ты нашел решение? Напиши результат поста пожалуйста )) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2016, 23:04 |
|
Как в Dispose() узнать, что процесс и программа завершаются
|
|||
---|---|---|---|
#18+
для этиx целей есть дерево процессов, если процесс принудительно отстрелить, то его выполнение прервётся, так что ни о каком послед. выполнении речи быть не может. Но когда процесс отстреливают, можно ука3ать, чтоб система убила все процесс в его ветке, тогда они все 3авершатся. по другому не бывает. Либо еще 1 вариант: процессы которые были 3апущены и3 твоего процесса проверяют наличие иx родителя, если его нет, они 3авершаются. Например с помощью семафоров, когда семафор освобождается, 3начит пора 3акрываться. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2016, 10:46 |
|
|
start [/forum/topic.php?fid=20&tid=1400228]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 146ms |
0 / 0 |