【问题标题】:Graceful termination of Qt application by unix signal通过 unix 信号优雅终止 Qt 应用程序
【发布时间】:2016-01-10 01:05:02
【问题描述】:

我在应用程序中保存设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个启动器,通过关机终止是标准情况。应用程序实际保存设置的唯一方法是手动关闭它或关闭会话(至少在肉桂上,我猜这只会关闭所有窗口)。甚至sudo reboot 也会阻止Qt 应用程序展开堆栈上的对象。以killall -s <signal> <app> 终止对SIGINTSIGKILLSIGTERM 具有相同的效果。如何强制我的 qt 应用程序优雅地终止于 SIGTERMaboutToQuit 也不会发出。

【问题讨论】:

标签: c++ qt signals terminate


【解决方案1】:

unix 信号处理程序允许调用的函数集最少。它们被称为 async-signal-safe 函数。调用其他所有内容,包括每个 Qt 函数,都会导致未定义的行为。

仍然有一种方法可以在 Qt 中处理 unix 信号。该方法使用 self-pipe-trick,并在 Qt 文档文章 "Calling Qt Functions From Unix Signal Handlers" 中进行了描述。

基本上你打开一个管道,每当你收到一个信号时,你::write(...)(这是一个异步信号安全功能)到管道。在另一端,您使用QSocketNotifier 收听管道。有关实现细节,请查看上面提到的 Qt 文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多