Показать сообщение отдельно
  #5  
Старый 05.06.2013, 08:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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