私はコンソールアプリケーションを作成しています。メインスレッドにいくつかのオブジェクトを作成し、それらをループに蹴り込みます。ユーザーがCtrl- C割り込み。Windows Ctrl-C - コマンドラインアプリケーションでローカルスタックオブジェクトをクリーンアップ
ここでは、http://msdn.microsoft.com/en-us/library/ms685049%28VS.85%29.aspxのような記事に適切な割り込みハンドラを書き込む方法について少しは読んだことがありますが、私はまだ1つのことについて混乱しています。割り込みハンドラがローカルオブジェクトのクリーンアップのための限られた範囲を残すようです。私が持っていた場合例えば、そのようなハンドラ:
BOOL CtrlHandler (DWORD fdwCtrlType)
... handle Ctrl-C
と私のメインは、このような何かを見て:
int main() {
DBClient db;
DataPuller p;
while (true) {
... do stuff until Ctrl-C comes in
}
私はCtrlキーを押しながらCをキャッチした場合でも、行うには方法はないように思えます変数dbとpを適切にクリーンアップして、グローバルに宣言せずに済むようにします。
これを行うには、より良い方法がありますか、それとも明白なものがありませんか?ありがとう。
なぜ何かをきれいにする必要があります - それらは自動変数です。関数スコープを終了するときに自分自身をきれいにする必要があります。 –
@Kerrek:Ctrl-CはSIGINTシグナルをプロセスに送信します。これが処理されない場合、(信号ハンドラから戻ることなく)アプリケーションが中止されます。したがって、自動変数はクリーンアップされません。 –
@Tux:私はOPが適切な終了条件を設定するだけのシグナルハンドラをインストールしたと思った。 –