5

こんにちはスタックオーバーフロー:時々読者、初めてのポスター。

バックグラウンド:

XP SP3を実行しているWindowsボックス、まもなくWindows Sevenにアップグレードされます(MSDNAA <3)

1秒間に数千回呼び出される関数をフックすることでサイクルを取得するDLLが挿入されています。

Pythonアプリを介してこのDLLを通信/制御したいと思います。基本的に、DLLが機能し、Pythonアプリが頭脳/意思決定を提供します。

これを行うための私のゲームプランは、DLLにカウンターとifステートメントを含めることです。フックされた関数が呼び出されるたびに、counter ++を実行し、if(counter == 250){// dostuff();のようになるまで元の関数に戻ります。}。この背後にあるのは、ターゲットアプリをほとんど妨げられずに実行できるようにすることですが、それでも興味深いことを実行できるようになります。

問題:

私は、通信を行うためにどのIPC方式を使用すべきかについて完全に途方に暮れています。ソケット、共有メモリ、パイプ、ファイルマッピング(?)、RPC、およびクリップボードへの書き込みのような他の(一見)難解なものがあります。

私はおもちゃの例以外の種類のIPCを実装したことはありません。

私は私が何かが必要だとかなり確信しています:

  • PythonとDLLの間のやり取りを処理できます
  • ブロック/待機しません
  • 待機中のデータを確認し、データがない場合は続行できます
  • ロックが関係している場合は、待つ代わりに続行できます
  • 読み取り/書き込みにも多くの時間を要しません

ヘルプ?お時間をいただきありがとうございます。十分な一般情報を提供し、受け入れられている慣習に違反していないことを願っています。

関連する質問ボックスはとてもかっこいいので、投稿する前によく読んでみました。

4

2 に答える 2

2

ソケットを試してください。あなたの要求は本質的に非同期操作の要件です。Pythonには、ソケットの非同期IO用の非同期モジュールがあります。同時に、Pythonのstdlibが他のIPCを非同期的に処理できるようには見えないので、それらを使用することはお勧めしません。

于 2011-01-20T16:05:29.177 に答える
1

リアルタイムを気にしない場合は、通信にファイルシステムを使用できます。DLLの出力用のログファイルと、DLLの動作を変更するために時々読み取られる構成ファイルです。

于 2011-01-07T02:21:13.200 に答える