共有メモリとフック

[戻る]
ドルドル 2006/03/23(木) 22:30:04
 いつもお世話になります。VC++6.0 MFCで開発をしております。キーボードフック
(グローバルフック)を作成しようといろいろ調べていく上で共有メモリなどの言葉が
でてきました。
 そこで、質問があります。
 i)  フックに問わず この共有メモリを利用する利点とは何なのでしょうか?
 ii) キーボードフックを作成するにあたり 共有メモリは利用しないといけないので
しょうか??それとも利用しなくてもできるのでしょうか??
 ご教授お願いいたします

YuO [E-Mail] 2006/03/23(木) 22:37:38
i) そのまんま,メモリを共有できることが利点です。
正しく排他や同期を行うことができれば,簡易的なプロセス間通信が可能になります。

ii) 利用する必要はありません。
ただし,フックDLLは仕込んだ側と異なるプロセス空間で動くため,
仕込んだ側とデータを共有したい場合には,共有メモリが一番簡単な解になります。

PATIO 2006/03/24(金) 17:19:54
ii)についてはYuOさんが書かれている以上には思いつかないので
i)について

一つのプロセスで完結するようなシステムであれば、
特に恩恵は無いと思います。
プロセスが違うとメモリ空間が別管理になるので
プロセス間で直接メモリのアドレスでデータをやり取りが出来ません。
通信で直接送る手もありますが、大きなデータの場合に両方の
プロセスにそれぞれデータを抱えることになるのでメモリの無駄になります。
そこで共有した方がよいデータを共有メモリ上に置くようにして
変更があったということだけを相手に通知するようにすれば、
通信量を少なく出来ますし、メモリも無駄遣いしないで済みます。
但し、共有メモリの場合は複数のプロセスからアクセスされますので
排他制御をきちんと行う必要があります。
また、マルチスレッドで処理するような場合でも
排他機能を持ったデータ管理クラスを作成して
グローバルにそのクラスをインスタンスを作成し、
共有メモリとして使うようなことをしたことがあります。
スレッド間の通知には同期オブジェクトを使い、
データのやり取りそのものは上記のクラスを通して
行うようにしていました。
ご参考まで。

ドルドル 2006/03/24(金) 23:47:47
[[解決]]
 YuOさん。PATIOさん。ありがとうございます。少し共有メモリについて勉強して
いきたいと思います。ご丁寧に解説ありがとうございました。勉強していく過程で また
伺うこともあるかと思いますが そのときはぜひまたよろしくお願いします。

古いスレッドには追加発言できません。