Nico2Mobile進捗っす(タスクスレッド管理)

進捗っすを書き始めてから一か月経ってしまった。とはいえたまに帰ってからちょこっとやるのと、たまに休みにまとめてやるのとを繰り返してるので、まじめにこれを開発する仕事をしている場合を考えたらまだ一週間分にも満たない時間なんじゃないかと。。。

さて、友人マリオが消されてやる気を失いかけていたのだが応援してくれる人もいるようなので若干やる気を取り戻した。

NMR200806050.jpg

とはいえ見た目に進捗はなくおもに進捗は中身の話。

flvのダウンロードとmp4の変換作業というのはまったく異なるリソースを使う。前者は主にネットワークであり、後者は主にCPUである。使うリソースが違うのだから当然マルチスレッドにしてダウンロードと変換を並行して走らせることを考える。

.NETにThreadPoolという機構があってこれが便利だったのでこれで実装していた。しかし変換が停止できない!ということに気がついてMSDN読んでみるとThreadPoolで動くのはbackground threadであり、そもそも優先度付していろいろ並行作業するのは向かないと書いてあった。

しょうがないので自分でスレッド管理することにして、ダウンロードや変換をいわゆるCommandパターンにくるんで非同期に実行させることにした。これでとりあえず処理を停止できるようになった。変換の場合は別プロセスで動かしているのでそのプロセスもabortさせたりと面倒だった。全然、気にしなくてよいところでデッドロックおきるんじゃねーかと、もんもんとシーケンス図書いてた自分は何だったんだろう。眠い頭でマルチスレッドプログラミングするもんじゃないなと思った。

そろそろiTunesやデバイスへの動画のコピーに手をつけようと思う。