1

私のクラスは次のようになります。

AppStart{
static void SignalHandler(int signal){
    std::cout<< log_file_;
}
static void Start(){
//Set log_file_ path 
//Register signal handler 
}
static string log_file_;
}

コマンドを使用してシグナルを送信することによって初めて SignalHandler が呼び出されるとkill、正しい値が出力されます。しかし、複数回呼び出されると、未定義の動作が発生します。プログラムの実行が終了する前に静的変数が破棄されるのはなぜですか?

4

1 に答える 1

5

onの呼び出しは、非同期のシグナルセーフ関数operator<<()ではありません...したがって、シグナルハンドラー内で使用しないでください。それらを使用すると、未定義またはせいぜい不確定な動作が発生します。私が提供したリンクで、low-level など、出力の可能な代替候補のリストを確認できます。std::coutwrite()

于 2012-12-11T18:37:58.580 に答える