SQLite3を使用してデータベースファイルを維持するコンソールモードプログラムがあります。実行にはしばらく時間がかかりますが、データベースへの書き込みが発生したと仮定すると、いつでもキャンセルしても安全です。(これはすべてWindowsの下にあります)
CtrlC実行中のプログラムの観点から、別のプログラムがTerminateProcessを呼び出すよりも、コンソールでヒットする方が安全ですか?
TerminateProcessが呼び出されると、データベースが破損する可能性があることに気付きました。これは、プログラムが書き込みを終了する機会がないためだと思います。私の推測ではCtrlC、OSがシグナルを強制終了するのではなく、プログラムがシグナルを取得してそれ自体を終了するため、それが優れていると思います。
プログラムは実際にはシグナルを処理しないことに注意してください(SQLiteが処理しない限り)。シグナルを処理するためのWin32実行可能ファイルの組み込みのデフォルトメカニズムについて話していますCtrlC。
質問を明確化/単純化するには-この書き込みが実行されたばかりであるとすると、次のようになります。
fwrite(buf, 1024*1024, 1, stream);
この書き込み中、TerminateProcessの動作は?とは異なりCtrlCますか?