Я предполагаю, что вы закрыли окно верхнего уровня и, следовательно, все его дочерние окна, но не закрыли само приложение.
Этого не происходит, если ваша программа организована «обычным» образом, но если вы умышленно или случайно использовали необычное расположение, это может произойти.
Исправление, конечно, зависит от того, как именно вы расположили свой код. Тем не менее, вот предложение начать.
Обычный способ закрыть приложение - вызвать wxApp :: OnExit (), что обычно происходит при закрытии окна верхнего уровня.
У вас есть собственный класс, производный от wxApp? У вас есть переопределение OnExit ()? Если нет, то сделайте это и используйте отладчик, чтобы проверить, вызывается он или нет. Если он не вызывается, выясните, как его вызвать.
Другая идея: используйте следующее, чтобы убедиться, что ваше окно верхнего уровня закроет приложение
bool wxApp :: GetExitOnFrameDelete () const
Возвращает true, если приложение будет закрыто, когда окно верхнего уровня
удалено, в противном случае - false.
Если это возвращает false, используйте соответствующий набор, чтобы сделать это так.
Третья идея: приложение не закроется, пока открыты окна верхнего уровня. Так, возможно, у вас есть другое окно верхнего уровня, которое свернуто или невидимо, но не было закрыто? Любое wxDialog или WxFrame или окно, полученное из них, является окном верхнего уровня и будет препятствовать закрытию приложения.
Четвертая идея: есть ли у вас глобальные переменные или атрибуты объекта приложения, чьи деструкторы могут войти в бесконечный цикл? Эти деструкторы вызываются после разрушения окон, и если одно из них не возвращается, вы увидите поведение, которое вы описали.