Показать сообщение отдельно
  #8  
Старый 15.03.2012, 17:07
kiman.ru kiman.ru вне форума
Новичок
 
Регистрация: 11.02.2010
Сообщения: 63
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
При вызове функции копирования (а вызываешь ты ее из главного потока программы) поток тормозится до окончания выполнения функции, по сути ждет ее завершения. В это время никакие сообщения им не обрабатываются. И как бы ты не старался из паралельного потока изменить визуальные компоненты (а за их отрисовку отвечает главный поток программы) у тебя ничего не получится (не будем тут углублятся в вопрос о том, что поток изменения кнопки у тебя написан не правильно, сути дела это не меняет). Сообщения отправлненные главному потоку просто "толпятся" в очереди до окончания работы функции копирования файла. По большому счету - если функция копирования не вернет управление программе, то программа "зависнет" в ожидании. Из диспетчера задач это будет выглядеть так: "Программа не отвечает". Как только копирование завершено (функция вернула результат), главный поток программы начинает обрабатывать накопившуюся очередь сообщений, и программа "отвисает".
На примере такое поведение видно при установке некоторых игр (у которых инсталятор кривой). Если инсталятор игры содержит большой контейнер с файлами (архив), то при его открытии (для установки) антивурус перехварывает процедуру открытия файла и начинает проверять файлы из ахива, если файлов много (очень много или дофига) и инсталятор кривенький, то создается впечатление что установка зависла.
Вот примерно так.

Спасибо за объяснения Да, правильно обновлять визуальные компоненты через Synchronize.

А почему, если вынести копирование файла в отдельный поток, то все остальные визуальные компоненты на форме можно изменять?
Ответить с цитированием