キャッチする方法 Ctrl+C C++のイベント?
signal
は実装が異なるため、最も信頼できる方法ではありません。 sigaction
を使用することをお勧めします。トムのコードは次のようになります。
#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;
}
Windowsコンソールアプリの場合、 SetConsoleCtrlHandler を使用して処理します CTRL+C そして CTRL+BREAK。
例については here を参照してください。
SIGINTをキャッチする必要があります signal (POSIXについて話しているのですか?)
署名については、@ Gab Royerの回答を参照してください。
例:
#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(#include <signal.h>)を使用します。
WIN32 GUIアプリケーションでは、WM_KEYDOWNメッセージを処理する必要があります。