【发布时间】:2020-09-27 08:55:17
【问题描述】:
有一个奇怪的问题,我无法在网上找到答案,所以我在这里试试运气。 我有一个使用 wxWidgets 的普通 erlang 应用程序,一旦我尝试关闭我的应用程序,我得到 wxServer 确实进入了连接到窗口关闭的事件的事件,我收到一条消息,它正在退出,我的窗口确实关闭了,但是如下图所示,我的工具栏上的 beam.smp 根本没有关闭,我必须手动强制关闭将 SIGTERM 发送到 erlang 终端的 beam.smp 文件这也会关闭我的 erlang VM(稍后我必须重新启动它)。
长话短说,我在关闭窗口事件中遗漏了什么,以便一切都很好地关闭而不会导致我的 erlang VM 崩溃?我能够读到 wxWidgets 在 macOS 上的行为不同,但我无法找到正确关闭应用程序的方法。
handle_event(#wx{event = #wxClose{}},State = #state{frame = Frame,panel = Panel}) ->
io:format("Exiting~n"),
wxFrame:close(Frame),
wxFrame:destroy(Frame),
wx:destroy(),
{stop,normal,State};
【问题讨论】:
-
FWIW,所有 OTP WxWidget 应用程序也会发生这种情况。例如,尝试在你的 shell 中运行
observer:start().,然后关闭观察者。您只能通过终止节点来摆脱“Erlang”(操作系统应用程序)。