wxw 3.0.4, Visual Studio 2008, MSW
В документации сказано- не удалать объекты wxWindow (и производные) с помощью стандартного delete, а пользоваться Destroy(), иначе рушится Event Loop и т.д.
В моем проекте часто нужно удалять десятки объектов wxWindow и создавать новые. Сначала пользовался delete по незнанию, приложение часто падало.
Стал пользоваться Destroy, стало лучше, но приложение все равно периодически непредсказуемо падает, причем по дебаггеру видно, что падает явно не в моем коде, а в глубинах библиотеки.
Если вместо Destroy вызывать просто Hide(), то падения прекращаются, но... так мы не освобождаем память.
Как же все таки правильно удалять окна и производные?
На английском встречалось, что destroy удаляет объект безопасно для цикла сообщений только если это top level window. В моем приложении они явно не top level, т.к. их родительское окно само является дочерним для главного окна приложения.
И как быть?..
Странное поведение wxWindow::Destroy()
Re: Странное поведение wxWindow::Destroy()
First of all: You can not delete any window from a secondary thread. (Just in case you were doing that).
But in general deleting a non-toplevel window with "delete" should be safe. Exception, if you're inside an event handler of a certain window, deleting that window could cause a crash. In that case use wxAppConsole::ScheduleForDestruction()
https://docs.wxwidgets.org/trunk/classw ... 22f9de9d90
If the app still crashes, there must be something else going on.
But in general deleting a non-toplevel window with "delete" should be safe. Exception, if you're inside an event handler of a certain window, deleting that window could cause a crash. In that case use wxAppConsole::ScheduleForDestruction()
https://docs.wxwidgets.org/trunk/classw ... 22f9de9d90
If the app still crashes, there must be something else going on.
Use the source, Luke!
Re: Странное поведение wxWindow::Destroy()
No, my app is single-thread.
Thanks for advice, i'll try.
Re: Странное поведение wxWindow::Destroy()
Dobrogo vremeni sutok,
A zachem voobsche nugno udalyat okna? Oni sami udalyayutsja...
Kod mogno posmotret?
Spasibo.
A zachem voobsche nugno udalyat okna? Oni sami udalyayutsja...
Kod mogno posmotret?
Spasibo.
Re: Странное поведение wxWindow::Destroy()
сомнительно что destroy не может верно убить окно.
там ж ничего сложного по функциональности нет.
его надо поудалять из всех возможных списков, удалить из парента и просто вызвать delete.
единственно проблемный случай - это то, что сказал даблмакс. когда удаление вызывается синхронно из обработки событий для самого окна. тогда удаление надо откладывать...ну вот как даблмакс и сказал, или другим способом, типа CallAfter(...). хотя думаю в wxAppConsole::ScheduleForDestruction, СallAfter и используется.
там ж ничего сложного по функциональности нет.
его надо поудалять из всех возможных списков, удалить из парента и просто вызвать delete.
единственно проблемный случай - это то, что сказал даблмакс. когда удаление вызывается синхронно из обработки событий для самого окна. тогда удаление надо откладывать...ну вот как даблмакс и сказал, или другим способом, типа CallAfter(...). хотя думаю в wxAppConsole::ScheduleForDestruction, СallAfter и используется.
ubuntu 20.04, wxWidgets 3.2.1
Re: Странное поведение wxWindow::Destroy()
Доброго времени суток,
А зачем его вообще удалять? Окна удаляются автоматом вместе с родителем...
Можно на код посмотреть?
Спасибо.
А зачем его вообще удалять? Окна удаляются автоматом вместе с родителем...
Можно на код посмотреть?
Спасибо.