- 26 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:15:30 ]
- なるほど完全分離してる部分か。それなら納得。
C++ 側で HSQOBJECT でデータ保持するオブジェクトとかを組む場合にちょっとややこしいことになるね>複数VM たしか sqplus はそのあたりの処理がすごく変なことになってた気がする。本当にまともに動くかどうか怪しい。 scrat はきっちり書いてあると思う。 それにもからんで、C++インスタンスからベースVMにアクセスしたくなる局面がたまにでてくるんだけど、 複数VM×複数スレッド使ってるとそこで困る。コンストラクタ含むメンバ呼び出しで引数に渡ってくるVMは、 あくまでスレッドのVMで、ベースVMじゃない。単独VMなら必殺技グローバル変数が使えるけど 複数VMだとそれでは特定できない。 この問題は sq_getforeignptr/sq_setforeignptr を使えばたぶん解決する。 sq_newthread で生成されたスレッドVMに、ベースVM の値をこれをつかって隠しパラメータと して持たせるようにして、インスタンスからはこれで取り出して使うようにすればいい。 squirrel 側を拡張して、VMの親子関係を取得できるAPIを増設かなと一瞬思ったけど、 squirrel の構造的には、新規生成したスレッドVMと元のVMは完全に同格 (親子じゃなくて友達) なので、この get/setforeignptr で正解だと思う。
|

|