我有一个看门狗停止功能放在我从C ++程序执行的进程的解构器中。每当我使用该过程QT GUI上的“X”按钮关闭时,它将通过我在解构器中放置的代码运行。但是当我尝试在我的C ++程序中执行Qprocesskill / close / terminate来终止进程时,解析器(进程中)中的代码没有被执行。有谁知道什么是错的或有其他方法来关闭这个过程?感谢!!!
btw im on linux。
答案 0 :(得分:1)
当过程突然退出这些功能时,没有任何物体被拆除。它们等同于C函数出口(1)。尝试通过调用QApplication :: quit()来优雅地退出QApplication :: exec的事件循环,这将退出exec内部的主事件循环并允许main正常退出并允许在该点通常会自行销毁的所有对象执行此操作如此。
答案 1 :(得分:0)
使用std :: signal注册这些信号的处理程序(http://en.cppreference.com/w/cpp/utility/program/signal):
#include <csignal>
#include <iostream>
namespace
{
volatile std::sig_atomic_t gSignalStatus;
}
void signal_handler(int signal)
{
gSignalStatus = signal;
}
int main()
{
// Install a signal handler
std::signal(SIGINT, signal_handler);
std::cout << "SignalValue: " << gSignalStatus << '\n';
std::cout << "Sending signal " << SIGINT << '\n';
std::raise(SIGINT);
std::cout << "SignalValue: " << gSignalStatus << '\n';
}