Прервать загрузку в TJPEGImage ?
Делаю так: генерю исключение в этом обработчике, типа throw Exception("Stop loading process");
- получается, процесс прерван, НО!!! память не возвращается системе после удаления ссылки на объект TJPEGImage. И если так прервать десяток загрузок 1.5 mb файлов, памяти становится ощутимо меньше, а потом и вообще не остаётся. Загрузка происходит в отдельном потоке.
Кто-нибудь знает как побороть ???
А может быть кто знает компонент, кот поможет решить проблему ?
С TJPEGImage ничего не получится. OnProgress только статус процесса показывает, а не управляет им.
Если хочешь прерывать загрузку файла и чтобы еще и память очищалась, то лучше найди исходники библиотеки JPEG. Компонент скорее всего самому придется писать.;)
Кто-нибудь знает как побороть ???
Может попробовать так (первое что пришло на ум):
Генеришь исключения, но какого-то своего типа, у него можно сделать поле, в котором указавать, какой компонент загружался.
В Application->OnException или при помощи комопнента TApplicationEvents отлавиливаешь это исключение, остальные пропускаешь
При отлове исключения вызывать очистку компонента Image, который значился в этом исключении. Не помню какая там функция очистки.
В Application->OnException или при помощи комопнента TApplicationEvents отлавиливаешь это исключение, остальные пропускаешь
Не знаю, как в Сях, а в Дельфи (VCL?) для подобных случаев предусмотрено исключение EAbort и стандартная процедура Abort, его вызывающая. Описано это дело, помнится, в SysUtils. При пользовании EAbort дополнительного кода писать не надо - оно пропускается при обработке исключений приложением.
Это можно было бы пережить, но память хавается просто огромными кусками, метров по 20.
Это можно было бы пережить, но память хавается просто огромными кусками, метров по 20.
Так что там насчет очистки? FreeImage не помогает? Не помню точно имени функции, есть какая-то у этого компонента не для удаления самого компонента, а для очистки изображения.
Нету у объекта TJPEGImage метода FreeImage.
Нету у объекта TJPEGImage метода FreeImage.
Тогда боюсь, придется смотреть исходники библиотеки, используемой компонентом. На диске с Билдером должны быть.
Альтернативных путей никто не подскажет ?
Я одним глазом глянул в библиотеку, там сразу в глаза бросились пару функций - Останова (де)компрессии и очистка занятой памяти...
Осталось только ручками поработать!:D
Тебе даже не обязательно исходник библиотки JPEG иметь, достаточно заголовочный файл "jpeg.h" (если не ошибаюсь), откомпайленую библиотеку и исходник TJPEGImage (чтобы не разбираться что за чем идет).
OnProgress переделать надо, добавить переменную Abort, чтобы можно было остановить процесс.
И переписываешь функцию компрессии TJPEGImage с учетом Abort.