Я не очень понимаю в программировании, а тем более, что именно там у Вас происходит,
однако ProcessMessages в Thread - мне кажется лишним маслом, на масле.
Когда дело было в поиске контуров и я сам "заранее согласился с вашим мнением "
и отказался от использования TThread
(Мне для отладки рекурсивной процедуры нужна была возможность создать "стороннего наблюдателя " а после отладки это был просто лишний тормоз )
Но при поиске (распознавании) метки, все иначе и использование TThread полностью себя оправдало .
Дело даже не использовании других ядер процессора
(специально оставлял доступным программе одно ядро и особой разницы в скорости обработки данных не обнаружил )
Дело в том, что процесс поиска реально можно запустить "параллельной ниткой " избавившись от ВИДИМОГО (нервы драло невероятно !) замирания обработки кадров (он у меня и так вызывается не для каждого кадра но без отдельного потока это не очень помогает )То есть я кидаю в процесс данные и "иду пить чай" (точнее "продолжаю смотреть телевизор" ) через какое то данные НЕ ЗАМЕТНО обработались ... процесс ждет следующей порции данных ... основной процесс показывает результат (если он есть) и через равное количество кадров готовит данные для следующего захода .
Все ! Даже без бонуса в виде частичного исполнения кода на другом ядре это как минимум снижает нагрузку на мои нервные клетки ....
ЗЫ
Кстати, как я уже писал в программах для виднды потоки можно использовать не применяя класс TThread...
обращаясь к ядру системы через WinApi (
viewtopic.php?p=125032#p125032)
Там есть свои подводные камни но местами код получается даже проще чем с TThread .
ЗЫ ЗЫ А конкретно по
" ProcessMessages в Thread" (извиняюсь, что сразу не вник в суть замечания ... дискуссия воспарила в неведомые дали и я вместе с ней ...
)
У меня application.ProcessMessages; вызывается
в основном коде (потоке) .
Любой вызов
application.ProcessMessages; из MyThread.Execute; гарантированно мгновенно вызывает КРАХ программы, а иногда и крах системы с "экраном синей смерти" !
А еще более конкретно While SMT.ProcessRUN do ; без application.ProcessMessages; просто полностью ВЕШАЕТ всю программу .... И шут знает почему ... (возможно проделки "быстрой оптимизации" ) по идее поток должен спокойно себе идти дальше до ProcessRUN:=False ; несмотря на то, что происходит в основном коде (в другом потоке )