朝の一仕事
今日は、未踏じゃない方の仕事の都合で気合を入れて早起き。今朝の9時を目標に一仕事やっつける必要があったため、5時に起きて朝食と濃いコーヒーを用意し、集中して作業にかかる。やっぱタイムリミットがあると熱の入り方が違いますね。
8:20頃一通りの作業が終わり、一安心したところ、どうも動くときと動かないときがあることに気づいた。
(以下マニア向け)
今朝作ったものは、C#のdelegateを使ってネイティブシステムからコールバックを受ける必要があるのだが、
foo(new Delegate(Callback));
みたいにしてデリゲートオブジェクトを直接渡していた。多くはこれで動くのだが、どうも再現性のないタイミングで動かなくなってしまう。
かなり長いこと悩んだ末にハッと気づいたのは、このDelegateオブジェクトがGCで回収されてしまっているという可能性。確かにネイティブ側からのみ参照があってもダメだ。
なので、このデリゲートを常に生きている参照に放り込んだところ見事解決。
確かにこれは気づきにくいよなあ。せめて、死んだdelegateに対してコールバックが来たときにaccess violationでも発生してくれればヒントになったんだが、一切エラー通知はないのでかなり手探りが続いた。
早起きしたので早くも眠い。これからデスノートの9巻読んで、スターウォーズエピソード3のDVD観て寝ます。
この記事へのコメントは終了しました。
コメント