異常終了時のことを考えると頭が痛い

正常動作のみを考慮した場合のコードはさくっとかけるものですが*1、正常じゃないケースを考えると途端に難しくなってくるような気がします。

今悩んでる事といったら 「終了時のリソース開放」 について。 アプリケーション終了時のリソース開放のフェーズで、リソースの開放に失敗したら…? という点。

更に何が現状で複雑なことにしてるかというと…マルチスレッドなんです。orz


親スレッドは、子スレッドに対して終了通知を送り、子が終了するまで待機。 これは良いんですが、ここで子供が何かしらのリソース開放を行う事が出来なかったら…どうするんだろう。^^; 子供は親に正常に終了しなかった事を通知して終了。あとは親に終了処理をゆだねる? 作成したスレッド内でしか開放できないリソースだったらどーしよう…。 ウィンドウとか…。

隠しでも良いので、親ウィンドウを親スレッドで作っておいて、子スレッドで作るウィンドウは全て親に対する子ウィンドウにしてしまう…とか? 親ウィンドウを破棄すれば子供も消えるはずなんで…… って、違うスレッドでも正常に破棄してくれるよなぁ。 …DestroyWindow は別スレッドからは呼べないみたいだけれど…。 …う〜ん…


また、子スレッドがフリーズして *2 終了自体しないような状況が発生した場合はどうするべきか? 親はタイムアウトさせるようにしておいて、TarminateThread するしかなさそうだけれど……そんなことして正常な終了処理が可能なんだろなぁ? …あぁ、強制終了な時点で異常終了確定ですかそうですかそうですか。(ぉ …とはいえ、何もせず放置で、メモリリーク / ハンドルリークはしたくないよなぁ…。



とまぁ、明らかに知識・経験不足感。 とりあえず…寝ます。(何*3

*1:すげーウソだ:ぉ

*2:API呼び出しとかで

*3:昨日分の睡眠がまだ