Сохранение работоспособности приложения

   
На этом шаге рассмотрим некоторые вопросы сохранения работоспособности приложений.

   
В некоторых ситуациях при интенсивных действиях в вашей программе может случиться так, что графический интерфейс программы "замрет" и станет неспособным обрабатывать события, связанные с интерактивными действиями пользователя (нажатие кнопки мыши или клавиши клавиатуры). Возьмем следующий пример:

for (int i = 0; i < 1000; ++i) {
    // Выполнить трудоемкие вычисления
}

   
Этот код, если он исполняется в основном потоке, заблокирует на определенное время обработку событий, и, значит, пользовательские действия с интерфейсом все это время обрабатываться не будут, а также, если окно этой программы будет перекрыто другим, то оно не будет перерисовываться.

   
Один из возможных вариантов решения этой проблемы — исполнение подобного кода в отдельном потоке. Более простой способ — вызов метода CoreApplication:: processEvents(), который позаботится о том, чтобы все накопившиеся в очереди события были обработаны. Для этого наш пример должен быть изменен следующим образом:

for (int i = 0; i < 1000; ++i) {
    // Выполнить трудоемкие вычисления
    qApp->processEvents(); // Доставить накопившиеся события
}

   
Теперь в каждой итерации цикла после выполнения действий осуществляется обработка событий, что дает программе возможность перед выполнением очередных действий отреагировать на накопившиеся события.

   
На следующем шаге рассмотрим реализацию фильтров событий.

Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий