Hatena::Grouptemtan

End of Dary

2012-07-23

[]toxyzzy その6 23:46 toxyzzy その6 - End of Dary を含むブックマーク はてなブックマーク - toxyzzy その6 - End of Dary

続き。

休日中、車で移動中に色々と実装方法について考えていたのだが、元々はデータ出すプロセス匿名パイプ→toxyzzy→名前付きパイプ→xyzzy というデータの流れが当初の考えであった。けれども、このパイプが 2 つあって一度バッファにするの無駄じゃねー?って思うようになって xyzzy に直接この匿名パイプをつなげる事ができればいいんじゃね?って思いついた。確か、ハンドルを他のプロセスにうつす関数が DuplicateHandle ってあって以前それを(別の目的で)使った時にそういう仕様があったのを思い出したので実現できそう。

ということで、実際にテストプログラムを組んでみてやってみたら、ちょいと試行錯誤はあったけど、大体思ったとおりに出来ることが判明。これにより、今まで想定していたのよりもかなり効率や手間自体が良い感じのプログラムになった感じ。この前書いた lisp の半分以上が無駄になったけど、まあいいでしょう。名前付きパイプ用の待ち受け同期やエラー時のめんどくささが無くて、かなりベストに近い実装になると思う。

ということで、あと懸念事項は、toxyzzy から xyzzyプロセスハンドルを取得する方法。ちょこちょこっと調べてみると CreateToolhelp32Snapshot 関数を使うと良いみたいで、Windowsタスクマネージャもこの関数を使ってるっぽい。ちょいとプログラムを組んで使ってみるとあっさりと xyzzyプロセスIDが取得できるみたいなので、これでほぼ懸念事項は無い感じかな。設計に関しても、プログラムの構造自体が相当簡単になったので、もうここらで直接コードを書き始める感じで OK でしょう。それは明日かなー。