MFC: GUI зависает, но продолжает работать - PullRequest
0 голосов
/ 28 июня 2018

Я столкнулся с проблемой, которую не могу решить.

Я работаю над проектом с MFC в Visual Studio. Проблема в том, что иногда GUI просто перестает визуально реагировать, но технически он продолжает выполнять функции, для которых он предназначен. Это означает, что когда я нажимаю кнопку, выполняется функция OnBnXXXPressed, но кнопка выглядит не так, как она была нажата, как если бы я нажимал на изображении кнопки, а не на самой кнопке. И это не просто эта кнопка - каждый другой элемент GUI , кажется, продолжает работать, но не показывает, что он работает.

Кроме того, в этом состоянии диалоговые окна не отображаются при их вызове. Если я вызову AfxMessageBox, окно сообщения не появится, и поток, вызвавший эту функцию, не будет заблокирован; AfxMessageBox в основном будет пропущен.

Я понятия не имею, что может вызвать такое поведение. Вопрос: что должно происходить в программе, чтобы она так себя вела? Особенно, если он построен с использованием MFC?

Проект состоит из 50+ файлов, и каждая функция, отвечающая за графический интерфейс, вносит изменения в элементы, о которых идет речь. Я не знаю, где ошибка, и я прошу вас, по крайней мере, , где я должен искать ее.

Спасибо за внимание!

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Ответ изначально был предоставлен в разделе комментариев. Мой код действительно имеет утечку ресурсов GDI, которая провоцирует такое поведение.

0 голосов
/ 29 июня 2018

Когда нажата кнопка, вы выполняете кучу операций или быстро возвращаетесь? Если вы не вернетесь, возможно, заблокируете поток пользовательского интерфейса. После того, как пользователь нажмет на кнопку, сколько времени уйдет на завершение работы OnClick для этого?

Если это так, вот дополнительная информация: https://docs.microsoft.com/en-us/windows/desktop/Win7AppQual/preventing-hangs-in-windows-applications

Решение, которое я обычно использовал для длительной логики при щелчке пользовательского интерфейса, заключается в запуске фонового потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...