現在共有メモリを取り扱うプログラムを組んでいます。
プロセスAが共有メモリにデータを書き込みプロセスBがそのデータを使うという
ようなプログラムです。
共有メモリにはCreateFileMapping を使用しています。
仮にプロセスAが落ちてしまった場合、書き込んだいたメモリが消去されるという
考えに至ったのですが(実際にそんな感じになっていました)
プロセスAが落ちてもデータは残っているようにしたいのですが
何かよい方法はありませんでしょうか?
共有メモリ
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 共有メモリ
無くならないはずなんですが、消えますでしょうか?
検証コードを見せて頂けると、こちらでも検証出来ますのでお願いします。
CreateFileMapping の仕様では、全部のハンドルが閉じるまで保持されると書かれています。
「CreateFileMapping 関数」
http://msdn.microsoft.com/ja-jp/library/cc430039.aspx
検証コードを見せて頂けると、こちらでも検証出来ますのでお願いします。
CreateFileMapping の仕様では、全部のハンドルが閉じるまで保持されると書かれています。
「CreateFileMapping 関数」
http://msdn.microsoft.com/ja-jp/library/cc430039.aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 共有メモリ
読み込み用のハンドルを開くより前に落ちた場合は,まあデータは失われますが……。
これを避けるならば,ファイル等の不揮発性ストレージに書き出すしかないでしょう。
# 書き込み中のデータにどれだけの意味があるのかわかりませんが。
結局は,どのタイミングでプロセスが落ちたのかによって,状況が変わります。
どういうタイミングで落ちたのでしょうか (読み側と書く側のファイルマッピングオブジェクトのハンドルを得るタイミングと,プロセスが落ちるタイミング)。
あと,ファイルマッピングによる共有メモリがデータを渡すための手段であるならば,WM_COPYDATAやパイプなどの方法で直接プロセス間通信をしてみるのもよいかもしれません。
これを避けるならば,ファイル等の不揮発性ストレージに書き出すしかないでしょう。
# 書き込み中のデータにどれだけの意味があるのかわかりませんが。
結局は,どのタイミングでプロセスが落ちたのかによって,状況が変わります。
どういうタイミングで落ちたのでしょうか (読み側と書く側のファイルマッピングオブジェクトのハンドルを得るタイミングと,プロセスが落ちるタイミング)。
あと,ファイルマッピングによる共有メモリがデータを渡すための手段であるならば,WM_COPYDATAやパイプなどの方法で直接プロセス間通信をしてみるのもよいかもしれません。