私は次のC++コンソールベースのアプリケーションをユーザーから無期限に読み取り、ユーザーがコマンド「bye」を入力したときに終了します。無限ループに陥ることなく、WindowsのC++コンソールアプリケーションでctrl-cイベントをトラップする方法はありますか?
ターゲットプラットフォームは、Windowsで、使用しているコンパイラは、私が何をしようとしているMS Visual Studioのエンタープライズ2015年
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
void ReadInput(void)
{
string x;
while (x != "bye")
{
getline(cin, x);
cout << x << endl;
}
}
BOOL CtrlHandler(DWORD fdwCtrlType)
{
switch (fdwCtrlType)
{
case CTRL_C_EVENT:
ReadInput();
return TRUE;
default:
return FALSE;
}
}
int main(void)
{
SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);
ReadInput();
return 0;
}
あるユーザーはCTR-Cを押すたび、CtrlHandlerが再オープン」、それをキャッチしますですReadInput()を介してシェル "しかし、それは何が起こっているのではなく、プログラムは無限ループに行く代わりに。
私の目的は、ユーザがctrl-cを押してコンソールアプリケーションを終了できるようにすることではなく、ユーザがコマンド「bye」を入力したときに終了することです。
コンソールウィンドウでイベントctrl-cをすべて無効にすることはできますか?
あなたのご意見をいただければ幸いです。
_私の目的は、ctrl-cを押してコンソールアプリケーションを終了させることではなく、ユーザーが "bye"コマンドを入力したときに終了することです。あなたは、一般的なコンピュータ動作と標準的なコンピュータ動作をブロックしています。どうして? –
...しかし、あなたが主張している場合:_ "[NULLとTRUE引数を指定してSetConsoleCtrlHandlerを呼び出すと、呼び出したプロセスがCTRL + Cシグナルを無視する](https://msdn.microsoft.com/en-us/library/windows) /desktop/ms686016%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396) "_。マニュアルを読むだけです。 –
私はドキュメントを知っているので、SetConsoleCtrlHandler(NULL、TRUE)を設定すると、プログラムは無限ループに入ります。 – Xigma