gpt4 book ai didi

signals - gtk3 - 在 g_application_hold() 期间注销

转载 作者:行者123 更新时间:2023-12-02 20:38:18 25 4
gpt4 key购买 nike

我的 gtk3 应用程序可以在 GUI 中运行,也可以在守护程序模式下运行。为了实现守护进程模式,我使用g_application_hold() .

到目前为止,这效果很好,但是一旦我在守护程序模式下运行应用程序时从 session 中注销,我的系统就会卡住 8 秒,直到操作系统杀死它。这样我的干净关闭程序就没有执行。这仅发生在守护进程中,而不是在 GUI 模式下。

目前我通过hook SIGHUP信号解决了这个问题,可以用来实现 session 注销:

static void
handle_hangup_signal (int signal)
{
MyApplication *application = my_application_get ();
g_application_release (G_APPLICATION (application));
}
...
signal(SIGHUP, handle_hangup_signal);

这修复了我的错误。没有 8 秒延迟,我的干净关机已执行。

但是我想知道是否有更干净的gtk3解决方案?使用 g_application_hold() 可以吗?还是有更好的 gtk3 方法在守护进程模式下启动某些东西?

最佳答案

我终于知道这种奇怪行为的原因了。这是由直接 gtk_main_quit() 引起的,由 session 管理器触发。

如果 g_application_release(..).前一行执行,不再有注销延迟。

实际上,甚至 Gtk-CRITICAL 也被此触发了 gtk_main_quit() :

Gtk-CRITICAL **: gtk_main_quit: assertion 'main_loops != NULL' failed

到目前为止,我还没有看到该消息,因为 session 管理器已经关闭了所属控制台。

关于signals - gtk3 - 在 g_application_hold() 期间注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44913967/

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