#include <iostream>
#include <csignal>
void handler(int signo){
std::cout << "Caught " << (signo == SIGINT) << std::endl;
}
int main(){
signal(SIGINT, handler);
while(true) ;
}
これらは、私はC複数回CNTRL + を押したときに、2つの異なることを行うように見えます。 Linuxでは捕捉されたメッセージが複数回表示されますが、Windowsでは捕捉されたメッセージが一度だけ表示され、のCntrl + の2回目のプレスで表示されます。ハンドラは信号を一度だけ捕まえることを意図しているのですか?または、Windowsが2番目のプレスでプログラムを終了させる原因となっている不足しているプロパティがありますか?シグナルハンドラは無期限に実行されますか? WindowsとLinuxの
As far as I can tellCNTRL + Cは、それがLinux上で同じようにWindows上でSIGINTとして扱われます。
https://msdn.microsoft.com/en-us/library/xdkz3x12.aspx –
@lateeveloperありがとう、私はそれを言及していないcppreference.comのドキュメントを見ていた。関連する行: "指定された関数が実行される前に、funcの値はSIG_DFL_に設定されています" – SergeantPenguin
Windowsでは、SIGINTハンドラは別のスレッドで実行されます。 –