Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Освобождение ресурсов при остановке процесса

29 views
Skip to first unread message

amusin

unread,
Aug 14, 2014, 6:30:45 AM8/14/14
to scmrt...@googlegroups.com
Привет!

Если процесс занял ресурс, например, mutex,
то надо побеспокоиться о его освобождении при вызове terminate().
Предлагаю сделать небольшую доработку (приаттачено)
в виде вирт. функции, вызываемой из terminate().

В проекте при необходимости ее следует переопределить.
    template <>
    void TProc1::complete()
    {
        // resources releasing
    }

Буду рад ваши услышать соображения.
OS_Kernel.zip

Harry Zhurov

unread,
Aug 15, 2014, 5:44:15 AM8/15/14
to scmrt...@googlegroups.com
14.08.2014 17:30, amusin пишет:
> Если процесс занял ресурс, например, mutex, то надо побеспокоиться о
> его освобождении при вызове terminate(). Предлагаю сделать небольшую
> доработку (приаттачено) в виде вирт. функции, вызываемой из
> terminate().
>
> В проекте при необходимости ее следует переопределить. template <>
> void TProc1::complete() { // resources releasing }

Не очень понятна ситуация, в которой это предпогалагется использовать.
Рубить процесс, который не спит (а, например, просто вытеснен), вообще
опасное дело - там вообще могут быть непредсказуемые последствия.
Механизм терминации процессов был введён для закрытия вполне конкретных
ситуаций - например, когда длительный процесс что-то делает и уже ясно,
что дожидаться окончания не нужно. При этом надо чётко представлять, что
там будет происходить и не делать действий, асинхронное прерывание
которых извне может повлечь негативные последствия. В общем, это крайнее
средство, прибегать к которому я бы не рекомендовал (лучше уж
организовать процесс внутри как автомат состояний и периодически чекать
сообщения извне, по которым менять логику своей работы. Это будет 100%
корректно, хотя, возможно, и не очень красиво.

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

--
HZ


amusin

unread,
Aug 17, 2014, 10:59:51 PM8/17/14
to scmrt...@googlegroups.com
Привет, Гарри!


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

Пожалуй, так действительно будет лучше. Спасибо.
Reply all
Reply to author
Forward
0 new messages