Как избавиться от зависания формы при выполнении работы в потоке через Synchronize?
Доброго времени суток. Ситуация такая. Создаю TThread, в нем запускаю функцию через Synchronize, в которой загружается jpeg картинка, переводится в bmp, проводятся операции с с канвой, сжатие, обрезание и тд, потом обратно в jpeg переводится и сохраняется. Так вот в 1 поток эта схема работает на ура, но чем больше потоков, тем больше зависает главная форма на время выполнения скриптов (а они в цикле работают). Код не привожу ибо вопрос по больше части теоретический. Как избавиться от этого зависания?
Как ни странно, не использовать Synchronize на долгих операциях! Сабж выполняет операцию в главном потоке и, значит, главный поток всё это время не отвечает.
Использовать какую-то структуру данных, в которую главный поток не лезет и надобности в синхронизации нет. А синхронизировать нужно только переключение состояния: поток работает или можно лезть.
Можно использовать PostMessage, правда, никто не знает, когда форма подберёт сообщение и нужно чётко следить за тем, кто чем владеет.