どのように私はをキャッチしますか? + CイベントはC++でですか?あなたは(私たちは右のPOSIXを話している?)SIGINT signalをキャッチする必要がありどのようにしてctrl-cイベントを捕捉できますか? (C++)
答えて
signal
は、最も信頼性の高い方法ではありません。 sigaction
を使用することをお勧めします。 Tomのコードは次のようになります。
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void my_handler(int s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
pause();
return 0;
}
my_handlerは引数として 'int s'を取るべきだと思います。 'sig_t'自体が関数ポインタ型です。 –
Works on OSXを使用する必要があります。私のmain.mmファイルでは、signal.h、stdlib.h、またはunistd.hも含める必要はありませんでした。私はstdio.hとFoundation/Foundation.hを含めたところですが、シャットダウンメッセージを出力するためにstd :: coutの処理が必要な場合は、iostreamをインクルードしました。 – Volomike
参照@Gab Royer'sの答え。
例:それは実装が異なるよう
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void my_handler(sig_t s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
signal (SIGINT,my_handler);
while(1);
return 0;
}
ええ、これはプラットフォームに依存する質問です。
コンソールプログラムをPOSIXで作成している場合は、 はシグナルAPI(#signal.h >)を使用します。
WIN32 GUIアプリケーションでは、WM_KEYDOWNメッセージを処理する必要があります。 Windowsコンソールアプリの
、あなたはCTRL +CとCTRL +BREAKを処理するためにSetConsoleCtrlHandlerを使用したいです。
例としてhereを参照してください。
- 1. backbone.jsプレーンな「変更」イベント以外のすべてのイベントをどのように捕捉できますか?
- 2. 電源ボタンロングプレスはどのようにして捕捉できますか?
- 3. 通知のクリックをどのように捕捉できますか?
- 4. Aspectjは春のフレームワークですべてのイベントを捕捉しませんか?
- 5. jsdom.jqueryifyコールバックによってスローされたエラーをどのように捕捉できますか?
- 6. 捕捉セル列のクリックと実行イベント
- 7. アプリケーションを停止するために捕捉するイベントはどれですか?
- 8. QMainWindowはQDialogによって捕捉されるべきイベントを処理しています
- 9. すべてのIframeのJavaScriptエラーを(window.errorを使用して)どのように捕捉するのですか?
- 10. PHPで外部イベントを捕捉するには?
- 11. MDIチャイルドロードのイベントを初めて捕捉する方法はありますか?
- 12. クラスヘルパーでクラスのイベントを捕捉する方法は?
- 13. Javaでスタックオーバーフローを捕捉して回復するにはどうすればよいですか?
- 14. StAX XML-parserで属性イベントを捕捉する方法は?
- 15. jquery mobileダイアログを使用しているときにonloadイベントを捕捉するにはどうすればよいですか?
- 16. MediaControllerのポーズ/再生ボタンをクリックしたときのイベントの捕捉方法
- 17. ManualResetEvent.WaitOne()でObjectDisposedExceptionを捕捉しても安全ですか?
- 18. eventmachineとの接続解除イベントを捕捉する(ping + timeout?)
- 19. ボタン別のクラスで捕捉されるイベントまたはコマンドをトリガーする
- 20. event.keyCodeを捕捉して別のkeyCodeに変更するには?
- 21. ポインタによって捕捉された再スロー例外
- 22. 迷惑メールネットワークトラフィックの捕捉
- 23. SaxParser.parseでレスポンスコードを捕捉する方法
- 24. アプリイベントをバックグラウンドで捕捉する
- 25. ハンドラによって捕捉されたオブジェクトは元のコピーですか?
- 26. システム(アンドロイド)に表示されるイベントをどのように捕まえることができますか?
- 27. SDL/C++ OpenGLプログラム、SDLによるSIGINTの捕捉を停止する方法
- 28. ユーザコントロールが.net、winformsで表示された後に捕捉できる最後のイベントは何ですか?
- 29. 捕捉できず、プログラムを停止しないエラー
- 30. スウィフトクラッシュを捕捉してログを記録する方法
コンソールアプリケーション、Windowsアプリケーション、または何ですか? – GManNickG
どのOSのWindows、Linuxなど。 – shf301
これはQtアプリケーションですが、開発中にコンソールから実行しています。 (これはLinuxです) – Scott