0

Ctrlこのプログラムは、 +経由で SIGINT を送信した後、無限の "Enter a:" をコマンド ラインに出力しCます。このループを終了するには、Ctrl+を使用します\。を含む行のコメントを外すとstd::cin.clear();、すべて正常に動作します。私の質問は、これは正しい方法ですか?std::cin.clear();プログラムを待機させたいすべての cin/cout の前に設定する必要があります。そのため、私には適切な方法ではないようです。

#include<iostream>
#include<signal.h>

void sig_handler(int s)
{
  std::cout << "Cought: " << s << std::endl;
  // do something...
}


int main ()
{
  struct sigaction sigIntHandler;
  sigIntHandler.sa_handler = sig_handler;
  sigemptyset(&sigIntHandler.sa_mask);
  sigIntHandler.sa_flags = 0;
  sigaction(SIGINT, &sigIntHandler, NULL);
  int a=1;
  while(a)
    {
      std::cout << "Enter a:" << std::endl;
      //std::cin.clear(); // Uncomment me!
      std::cin >> a;
    }
}

PS: シグナル ハンドラで cout を使用するのはよくない考えです。

PPS:std::cin.clear();古い (非推奨) を使用すると、すべて正常に (なしで) 動作しsignal()ます。

PPPS: 明確にするために、Ctrl+でプログラムを終了したくありませんC!

4

0 に答える 0