Цитата:
Сообщение от Pcrepair
- возможно ли это в принципе? с корректным освобождением ресурсов
|
да, естественно, это можно сделать и нужно делать. все
правильные программы при отмене длительных операций корректно завершают свои действия и освобождают занятые ресурсы
Цитата:
Сообщение от Pcrepair
- если возможно, то как конкретно это сделать, желательно пример
|
один из вариантов в 2-х словах: при отмене пользователем операции (нажатии кнопки Abort|Cancel) в соответствующий поток посылается сигнал прерывания и ожидается завершение потока. на примере TThread это вызов методов Terminate и WaitFor. при этом свойство Terminated станет true. все длительные операции в потоке (циклы) должны проверять значение это свойства (в каждой итерации) и когда оно истинно делать выход из цикла. между
логическими блоками потока так же проверять флаг и делать уже выход из Execute. естественно освобождая занятые ресурсы через try-finally, к примеру.
второй из вариантов в 2-х словах: также можно использовать всякие CreateEvent и WaitForMultipleObjects (для
длительных функций).