|
Модераторы: Snowy, Alexeis, MetalFan |
|
TechnoMag |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 20.3.2010 Репутация: нет Всего: нет |
При выборе папки с изображениями могут создаться все миниатюры, для все файлов, а иногда бывает, что файлы пропускаются.
Не пойму: проблема в реализации потока, или в компоненте? Пробовал на Win7 x64 и WinXp x32. Просьба указать проблемные места в коде. Прикрепляю файл проекта XE2. Это сообщение отредактировал(а) TechnoMag - 14.10.2013, 17:17 Присоединённый файл ( Кол-во скачиваний: 16 ) SimpleImageViewer.zip 94,87 Kb |
|||
|
||||
Illusion Dolphin |
|
||||||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Не рекомендуется в потоке вызывать
Не рекомендуется пользоваться канвой в потоке -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||
|
|||||||
TechnoMag |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 20.3.2010 Репутация: нет Всего: нет |
А как быть, если нужно, чтобы окно приложения не подвисало во время создания большого кол-ва миниатюр? С ProcessMessages в основном потоке все равно программа немного подвисает.
З.Ы. FTempBMP и FNewImage не привязаны к окну, и получается, что рисование происходит в памяти, а потом, синхронизированно, добавляются в ListView. |
|||
|
||||
Illusion Dolphin |
|
||||||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
OwnerData = true это раз. Ещё синхронизация - это долгий и нудный процесс, поэтому данные из потока лучше выдавать пачками, и в каждой пачке делать
И что? Canvas не рассчитано на многопоточность. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||||
|
|||||||
TechnoMag |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 20.3.2010 Репутация: нет Всего: нет |
Эффект тот же: иногда "рисуются" "пустые" миниатюры в ListView.
Про выдачу данных пачками пока опускаем - нужно сначала понять, что мешает добавляться всем миниатюрам в список.
|
|||
|
||||
Illusion Dolphin |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Сложно сказать наверняка, давайте я прокоментирую пару строчек, а вы потом ещё опишите, как выглядят пустые изображения (всегда пустое или если перегрузить директорию - грузится? какой цвет у изображения? не может ли быть такое что 2 потока одновременно грузят изображение в 1 лист?)
Да и способ на 100% - постепенно выносить из потока в Synchronize фугкция за функцию и вы найдёте то, что ищете -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
TechnoMag |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 122 Регистрация: 20.3.2010 Репутация: нет Всего: нет |
Пустое изображение содержит только название файла, область, где должна быть миниатюра таким же цветом как и фон ListView. Грузит изображения только один поток. Если перезагрузить директорию изображения могут загрузиться.
Ну да, сыпать иронией, этот так по умному - сразу будет всем видно, что человек что-то знает и понимает, а главное - знает какими способами еще можно найти причину неполадки. |
||||
|
|||||
MetalFan |
|
|||
Аццкий Сотона Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 5 Всего: 128 |
странная логика - вынос в synchronize самой ресурсоемкой операции...
я бы заюзал GDI+, полностью в отдельном треде. с передачей данных в/из него в memory stream или tbytes. -------------------- There are always someone smarter than you... |
|||
|
||||
Illusion Dolphin |
|
||||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Как я понимаю - это временно до выяснения причины "пробелов" в загрузке
Вы зря иронизируете. Проблема в реализации внутри VCL (в котором также есть баги), которая может меняться от версии к версии как минимум и в документации нет чётких данных про thread-safe для каждого метода. Вам, наверное, ещё не приходилось удалять из большого проекта 99% кода, чтобы найти сбойный участок, который может быть ну очень неочевиден. P.S. У меня в подписи ссылка на сайт с программой - попробуйте установите и откройте в ней вашу папку с фотографиями. Если вам понравится, то я могу вам помочь. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
WERITAS |
|
|||
******** Профиль Группа: Участник Сообщений: 582 Регистрация: 2.5.2005 Где: Москва Репутация: нет Всего: 5 |
Поднимаю тему!
Столкнулся с такой же проблемой: миниатюра в потоке криво формируется. Билдил код автора и смотрел как выполняется - у меня такой же эффект. Как это победить? Решение найдено! Это сообщение отредактировал(а) WERITAS - 21.5.2017, 11:50 -------------------- Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак" |
|||
|
||||
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |