14.08.2014 17:30, amusin пишет:
> Если процесс занял ресурс, например, mutex, то надо побеспокоиться о
> его освобождении при вызове terminate(). Предлагаю сделать небольшую
> доработку (приаттачено) в виде вирт. функции, вызываемой из
> terminate().
>
> В проекте при необходимости ее следует переопределить. template <>
> void TProc1::complete() { // resources releasing }
Не очень понятна ситуация, в которой это предпогалагется использовать.
Рубить процесс, который не спит (а, например, просто вытеснен), вообще
опасное дело - там вообще могут быть непредсказуемые последствия.
Механизм терминации процессов был введён для закрытия вполне конкретных
ситуаций - например, когда длительный процесс что-то делает и уже ясно,
что дожидаться окончания не нужно. При этом надо чётко представлять, что
там будет происходить и не делать действий, асинхронное прерывание
которых извне может повлечь негативные последствия. В общем, это крайнее
средство, прибегать к которому я бы не рекомендовал (лучше уж
организовать процесс внутри как автомат состояний и периодически чекать
сообщения извне, по которым менять логику своей работы. Это будет 100%
корректно, хотя, возможно, и не очень красиво.
Использование виртуальной функции преполагает написание дополнительного
своего кода не только функции, но и всего класса процесса
(отнаследоваться и т.д.). Достаточно громозкое решение. Если идти по
этому пути, то можно просто отнаследоваться от базового процесса и
добавить в свой всё, что угодно, по вкусу, без всяких виртуальностей.
Писанины столько же, завязок на код системы никаких. Имхо.
--
HZ