これを行うには、プログラムが何をしているのかを彼に知らせるグローバル変数などのプログラムを見せておく必要があります。
たとえば、長期実行中のプログラムがループを実行すると仮定、あなたはそれを行うことができます。g_shouldAbortと
g_shouldAbort = 0;
while(!finished)
{
// (do some computing)
if (g_shouldAbort)
{
// save variables and stuff
break; // exit the loop
}
}
グローバル揮発性変数として定義し、そのように:
static volatile int g_shouldAbort = 0;
( "volatile"と宣言することは非常に重要です。そうでなければ、誰もループに書き込まないので、コンパイラは、(g_shouldAbort)が常にfalseになり、optiそれを離れてマイズ)
、その後、例えば、他のユーザーが提案信号 APIを使用して、あなたがそれを行うことができます。
は
void signal_handler(int sig_code)
{
if (sig_code == SIGUSR1) // user-defined signal 1
g_shouldAbort = 1;
}
(あなたはもちろんのこのハンドラを登録する必要があり、参照をhere。あなたがプログラムにSIGUSR1信号を「送信」すると
signal(SIGUSR, signal_handler);
、(で例えばコマンドを殺す)、g_shouldAbortは1に設定され、あなたのプログラムは、そのコンピューティングを停止します。
このヘルプが必要です。
注:この手法は簡単ですが粗いです。シグナルとグローバル変数を使用すると、他のユーザーが概説したように、複数のスレッドを使用することが難しくなります。
for C++あなたはboost :: call_onceを考慮することができます – Nelstaar