【问题标题】:Exiting a program outside main function退出主函数外的程序
【发布时间】:2014-07-17 04:35:53
【问题描述】:

我正在使用 allegro 游戏库制作一个项目,当在游戏中单击 x 按钮时 将调用一个函数,然后我可以执行 std::exit(0) 或 allegro "allegro_exit()" 的内置退出函数,但我的程序无法正常退出,它仍然打开但没有响应,因为我没有'不从主函数返回。

如果我有的话,唯一的机会是在主函数中执行一个 while 循环,当未单击 x 按钮时执行某些操作,循环完成后,我通常可以从主函数返回,

但是我不认为 while 循环是个好主意,它不适合我的程序。

有没有机会以另一种方式做到这一点?

【问题讨论】:

  • std::exit 可能会运行已被挂钩的处理程序。要真正退出而不做任何其他事情,您可以转到 std::signal(SIGABRT, SIG_DFL); std::abort(); 。恕我直言,这并不是一个好主意,最好是优雅地return
  • 听起来像是 XY 问题。

标签: c++ allegro


【解决方案1】:

std::exit() 函数执行所有必要的清理并以正常方式终止程序。如果您的程序冻结并且没有响应,请考虑仔细检查负责资源释放的代码(析构函数等)。一些库可以以某种奇怪的方式对退出函数做出反应,因此请考虑这种情况。你可以阅读更多关于std::exit()here的信息。

不要将std::abort() 用于正常的程序终止,因为它不是为此而设计的,而且它不会在您的应用程序之后进行清理。

无论如何,我建议您检查项目的架构,并在所有清理后返回主函数。 while 循环没问题,因为它必须存在于某处等待用户输入。

【讨论】:

    猜你喜欢
    • 2014-03-01
    • 2018-11-26
    • 2021-07-27
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多