いつもお世話になります。VC++6.0 MFCで開発をしております。キーボードフック
(グローバルフック)を作成しようといろいろ調べていく上で共有メモリなどの言葉が
でてきました。
そこで、質問があります。
i) フックに問わず この共有メモリを利用する利点とは何なのでしょうか?
ii) キーボードフックを作成するにあたり 共有メモリは利用しないといけないので
しょうか??それとも利用しなくてもできるのでしょうか??
ご教授お願いいたします
i) そのまんま,メモリを共有できることが利点です。
正しく排他や同期を行うことができれば,簡易的なプロセス間通信が可能になります。
ii) 利用する必要はありません。
ただし,フックDLLは仕込んだ側と異なるプロセス空間で動くため,
仕込んだ側とデータを共有したい場合には,共有メモリが一番簡単な解になります。
ii)についてはYuOさんが書かれている以上には思いつかないので
i)について
一つのプロセスで完結するようなシステムであれば、
特に恩恵は無いと思います。
プロセスが違うとメモリ空間が別管理になるので
プロセス間で直接メモリのアドレスでデータをやり取りが出来ません。
通信で直接送る手もありますが、大きなデータの場合に両方の
プロセスにそれぞれデータを抱えることになるのでメモリの無駄になります。
そこで共有した方がよいデータを共有メモリ上に置くようにして
変更があったということだけを相手に通知するようにすれば、
通信量を少なく出来ますし、メモリも無駄遣いしないで済みます。
但し、共有メモリの場合は複数のプロセスからアクセスされますので
排他制御をきちんと行う必要があります。
また、マルチスレッドで処理するような場合でも
排他機能を持ったデータ管理クラスを作成して
グローバルにそのクラスをインスタンスを作成し、
共有メモリとして使うようなことをしたことがあります。
スレッド間の通知には同期オブジェクトを使い、
データのやり取りそのものは上記のクラスを通して
行うようにしていました。
ご参考まで。
YuOさん。PATIOさん。ありがとうございます。少し共有メモリについて勉強して
いきたいと思います。ご丁寧に解説ありがとうございました。勉強していく過程で また
伺うこともあるかと思いますが そのときはぜひまたよろしくお願いします。