gpt4 book ai didi

c++ - 通过 unix 信号优雅地终止 Qt 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:17 25 4
gpt4 key购买 nike

我在应用程序中保存设置时遇到问题。这是在相关对象的析构函数中完成的。它是一个启动器,通过关机终止是一个标准案例。应用程序实际保存设置的唯一方法是手动关闭它或关闭 session (至少在肉桂上,我想这只会关闭所有窗口)。连sudo reboot防止 Qt 应用程序展开堆栈上的对象。由 killall -s <signal> <app> 终止对 SIGINT 有同样的效果, SIGKILLSIGTERM .如何强制我的 qt 应用程序在 SIGTERM 上正常终止? aboutToQuit也不会发出。

最佳答案

有一组最小的函数允许 unix 信号处理程序调用。它们被称为异步信号安全 函数。调用其他所有内容(包括每个 Qt 函数)会导致未定义的行为。

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

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

关于c++ - 通过 unix 信号优雅地终止 Qt 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33083038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com