0

C++ プログラムから実行したプロセスのデコンストラクター内に配置されたウォッチドッグ停止関数があります。そのプロセスQT GUIの「X」ボタンを使用して閉じるたびに、デコンストラクターに配置したコードを介して実行されます。しかし、C++ プログラムでプロセスを強制終了するために Qprocesskill/close/terminate を実行しようとすると、(プロセスの) デコンストラクターのコードが実行されません。誰が何が間違っているか、またはプロセスを閉じるための代替方法を知っていますか? ありがとう!!!

ところで、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 に答える