kumaryu日記
2010-12-03
_ 日記
相変わらず日記に書くようなことがないよ。日記書いても上げ忘れるよ。
来年のSIGGRAPH ASIAは香港のようだ。がんばって行きたいかも。
.NETいじりが激しい今日このごろ。
PeerCastStation。チャンネル情報に入出力スレッドが読み書きするわUIスレッドが読み書きするわ変更されたらイベント起こすわで同期を考えるのが大変。チャンネル情報にはいろんな値が入ってるのでいちいちロックするのもめんどいし忘れそう。
チャンネル情報に対する操作およびチャンネル情報変更通知イベントは全部シリアライズして1つのスレッドで行なえば同期とか考えなくていいよね。これはメッセージループみたいなのを作ってそこに操作をつっこんでいけばいいだけじゃん?メッセージループを実現するクラスって.NETに無いのかな。
System.Windows.Threading.Dispatcherがそれっぽい。しかし名前空間がSystem.Windows.なんたらでWindowsBase.dllに入ってるあたりからわかる通りWPFのクラスだ。ロジックに使うのは気が引ける上に移植性が不安。monoでも動かないと困るのよ。
Dispatcherクラス自体はmonoにもあるけど同期実行は未実装か。非同期実行だけでもいけるかと思ったけどあんまりいけなかった。やっぱりmonoでも動くようにしたいとなるとこれをロジックで使うのはやめといた方がよさげー。あ、非同期実行しか実装されてないのってSilverlightというかMoonlight用なのか。
他に何かないか調べるとSynchronizationContextが比較的低レベルな指定スレッドで何かを実行するクラスのようだ。これを使えばいいのかな。AsyncOperationとかいうもっと上位のクラスがあるみたいだけどなぜか使い方が余計ややこしいのでSynchronizationContextをそのまま使っちゃいたい。こいつの移植性はありそうだし。
そう思ったが素のSynchronizationContextって全く同期しないって書いてあるな。そんなまさかとは思ったがmonoのソース見ても同期する気のかけらも見せないし、確かに既定で何をどう同期すればいいのかよくわからんのでそんなものだろう。 結局SynchronizationContextを使うにしても自前でメッセージループを実装しましょうねってことか。
スレッド間の通信はあんまり高級な仕組み使わずに泥臭くやっていった方が早いだろうと思ってきたんだけど、せっかくC#と.NETという今まであんまり手を出してなかったのを使うのでいろいろ使いたいよね。
Riko。ベースはもういじらんで上位のシーングラフをいじりはじめる。いじるっつーか一から作り直しだわ。
拡張性とかあとのこととか速度だとか全然考えずにまずは目先のモデルデータを描画できるようにしたい。いろいろ考えても結局まとまんねーんだからそれより早く動くようにしたい。とにかく動かさないと!
まずはObjFileを描くか。まずアニメーションとか無くて簡単なのからにしないとね。