Почему приложение не реагирует, во время выполнения операции?
Простое приложение на Delphi, которое добавляет пять тысяч строк в базу, но во время выполнения этих действий я не могу ни свернуть ни развернуть приложение. Если я переключаюсь на другое окно, не смогу с панели задач вернуть окно программы, надо все остальные окна свернуть, чтоб посмотреть на сколько процентов выполнено.
Объясните пожалуйста что это за феномен. Связано ли это с многопоточностью, которая в этом приложении отсутствует?
Маленький комментарий. Подключим логику.
1) Ты знаешь, что такое «межпоточная гонка» (race condition)? Если бы перерисовка и работа выполнялись параллельно, были бы жуткие гонки. Значит, всё-таки последовательно, а когда нужен параллелизм — налаживать его вручную.
2) Цикл работы Windows мало изменился с версии 3, где многозадачность была кооперативная.
А почему тогда, при выполнении долгих операций в цикле я ставлю Application.ProcessMessages , и сворачиваю окно программы, переключаюсь на другое окно и развернуть окно программы уже не получается ? так ведь тоже операция на разворачивание окна в очередь становится, почему не разворачивает при щелчке на панели задач?
Можно в цикле выполнения своих действий добавить application.processMessages;
Тогда приложение будет обрабатывать сообщения, и не будет выглядеть зависшим даже без потоков.
Но предпочтительнее все же использовать потоки....