1

DLL からのデバッグ出力に名前付きパイプを使用することを検討しています。私の DLL は、ときどきクラッシュする独自のクローズド ソース プログラムによってロードされます。問題は、プログラムがクラッシュすると、Windows がディスクに書き込まれる前にすべてをクリーンアップするため、現在のログ出力の一部が失われることです。

したがって、私の質問は、別のプロセスで名前付きパイプを作成し、DLL からそれに接続すると、DLL がクラッシュしてクリーンアップされたプロセスが、直前に名前付きパイプに書き込まれたデータを読み取ることができるかどうかです。私の2番目のプロセスからのクラッシュ?

タイミングへの影響をできるだけ少なくするために、非ブロック (バッファ) 方式で名前付きパイプに書き込む必要があります。最適な構成は何ですか? オーバーラップ IO? 誰かが良い読書へのリンクを与えることができますか? (私は C++ の初心者ではありませんが、WinAPI の初心者です)

4

1 に答える 1

1

名前付きパイプのバッファリングされたデータが、1 つのパートナーの障害で生き残るとは思えません。パイプを再度開くことができたとしても、古いインスタンス化からのデータは失われます。

代わりに Memory-Mapped Files (プロセス間共有メモリの Windows メカニズム) を使用できますが、共有データ空間の状態の処理には注意が必要です。プロセスが再び起動したときに新しいデータの書き込みを再開する場所は? たぶん、シンクからの「ここまで読んだ」という兆候のようなものです。また、この質問で認識した問題を回避するために、ソースの書き込み時にデータをフラッシュする必要があります。これにより、パフォーマンスが低下する可能性がありますが、最初にテストし、後で調整することができます。

于 2013-02-08T19:02:50.253 に答える