如何从另一个线程退出 QApplication?

How to exit QApplication from another thread?

所以问题是在任何应用程序中,有时 GUI 可能会冻结。不管它发生的原因是什么,我都希望能够 terminate/exit/quit 我的申请。
有没有办法从另一个线程(在同一个应用程序实例中)做到这一点?例如,假设 GUI 事件循环被冻结并卡在 while(1); 行中!

我已经尝试过的:
从另一个线程在 qApp 上调用 QCoreApplication::quit(),这不起作用,因为 GUI 事件循环被阻塞。
从另一个线程在 qApp 上调用 QCoreApplication::exit(),这不起作用,因为它说我只能从 GUI 线程调用它。

如果无法从另一个线程执行此操作,假设 GUI 线程被阻塞,您建议如何退出应用程序?

你想要硬退出还是优雅退出?对于超级硬退出,关闭处理程序(析构函数,使用 atexit 注册的函数)无法阻止,请使用 C 标准函数 aborthttps://en.cppreference.com/w/cpp/utility/program/abort

通常为此使用单独的看门狗应用程序。它应该定期 ping 您的应用程序,如果失败,则将其终止并重新启动。从应用程序本身内部执行它听起来不太可靠。