共有メモリ

共有メモリのアクセスには、下のテンプレートクラスを使っている。パラメータに、boost::arrayを入れて、中には文字列をコピーして使っている。非常にお手軽だけど、通知のメカニズムも欲しいな。
http://www.codeproject.com/threads/csharedstruct.asp

ファイルマッピングで、共有メモリの内容を書き換えた際には、イベントとかで通知するのが普通みたいだけど、受け手側で必要な準備の記述が結構面倒くさい。相互通信のタイミングを厳しく拘る内容でもないので、RegisterWindowMessageで取得したコードをPostMessageとかさせる事にしている。でもやっぱりイベントで受け取れるようにもした方が良いなぁ。なんかコールバックを呼び出すスレッドを作るクラスとか作れば良いのかな。面倒くさいなー。

ちょっとした決まりきったアプリのプロセス間通信の話なので、WM_COPYDATAとかを使う手でも別にいいんだけれど、あれも結局は内部的に共有メモリを使っているらしいし、それに他とかちあう可能性が出てくるので(まぁそんなの想定外でも良いんだろうけど)なんだか使いたくない。

共有メモリをFIFOに使う部品として、結構高機能で便利なのはあるけれど、
http://www.codeproject.com/threads/XQueue.asp
片方向通信で通知を受け取るのがサーバーのみで、サーバー側はスレッドを用意する必要があるのでやはり面倒。タイマーで見るとかすらもしたくないし。

まぁ富豪的にソケット通信しても、スタンドアローンのプロセスでたまに使われる程度だったら、今の世の中大したコストにはならないからそうしちゃっても良いんだろうけれど…。

なんやかんやでSendMessageかPostMessageを後で送るのが楽な気がするけど、排他も同期もしてないいい加減な実装なので、他人が見たらワロスな出来かもしれない。