とりあえずクライアントとサービスにあたるスレッドを一本ずつ作って、すんげー簡素な一対一片方向通信専用のパイプを自作して、リクエストを
shared_ptr<req_base_class>( new req_derived_sample_class( arg1, arg2... ) )
みたいなのに包んで渡す形で動くところまでは書けた。一見。
ただ、パイプのempty()やfull()の時、たぶん真面目にWaitForSingleObjectとかすべきなんだろうけど、テストコードは激しくスピンとかSleep()とかしつつポーリングである。まあ、めんどくせーけど次はここ調べるか…。
んで、通信パイプは単純にshared_ptrの配列をリングバッファとして扱ってるんだが、VC++2005以降の仕様が「volatileの読み書きはメモリバリア考慮してるから平気ですよ、x86ならCPUの方も心配無しさ」とのことで、インデックス変数をvolatileにしただけでメモリバリアもInterlocked関数も一つも書かずに普通に動いてるんだけど、こんなんで大丈夫なんだろうか本当に。shared_ptr受け渡しのリークとかも怖いし。ほとんど一発で動いたから、逆にすげー心配なんだけど(笑)。
(Visited 8 times, 1 visits today)