0

我有一个看门狗停止功能放置在我从 C++ 程序执行的进程的解构器中。每次我使用该进程 QT GUI 上的“X”按钮关闭时,它都会通过我放置在解构器中的代码运行。但是当我尝试执行 Qprocesskill/close/terminate 来杀死我的 C++ 程序中的进程时,解构器(进程)中的代码没有被执行。任何人都知道出了什么问题或有替代方法来关闭该过程?谢谢!!!

顺便说一句,我在 Linux 上。

4

2 回答 2

1

当进程突然退出这些函数时,没有对象被拆除。它们等价于 C 函数 exit(1)。尝试通过调用 QApplication::quit () 优雅地退出 QApplication::exec 的事件循环,这将退出 exec 内部的主事件循环并允许 main 正常退出并允许所有通常会在此时自行销毁的对象执行所以。

于 2012-12-01T01:54:30.410 回答
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';
}
于 2015-09-18T04:38:51.720 回答