私はここに同様のアプリケーションを持っており、TCP_NO_DELAYオプションが設定されたTCPソケットを使用しています(ある種のパケットバッファリングを行うNagleアルゴリズムを無効にします)。実際のネットワーク遅延は常に不明な変数のままですが、ソケットは問題なく100ミリ秒の更新レートを可能にする必要があります。私のアプリケーションでは、特定の制限を下回っている限り、これは問題ではありません(これは、タイムスタンプのデルタが大きくなりすぎた場合に、各パケットと大きな赤いダイアログボックスでタイムスタンプを送信することによってもチェックされます:])。アプリケーションにとって重要ですか?つまり、LV機器が新しいサンプルを取得するたびに、その値がx mSec以内にCアプリに到達する必要があることが重要ですか?
dllアプローチを機能させることもできますが、ソケットほど単純ではなく、2つのアプリケーションの相互依存性が高まります。ただし、可変アクセスはほとんど瞬時に行われます。少なくとも2つの可能性があります。
- Cアプリ全体をdllに入れ(最初は奇妙なアプローチに見えるかもしれませんが、機能します)、LVにロードしてメソッドを呼び出します。たとえば、アプリを起動するには、LVがdllのStart()メソッドを呼び出し、ループでLVがサンプルを取得して、dllのNewSampleValue(0メソッドなどを呼び出します。また、別のホストプロセスを記述しない限り、アプリをスタンドアロンで実行することはできません。
- 共有プロセスメモリを調べて、Cアプリと別のdllに共通メモリを共有させます。LVはそのdllをロードし、そのdllのメソッドを呼び出して共有メモリに値を書き込みます。その後、Cアプリはフラグをポーリングした後にそれを読み取ることができます(ロックが必要です!)。
- Cアプリにdll/activeX /を使用してLVプログラムを呼び出させることも可能かもしれませんか?電話をかけますが、そのシステムがどのように機能するのかわかりません。
私は間違いなくファイルアプローチを避けたいと思います。ディスクI/Oは本当のボトルネックになる可能性があり、ファイルで解決するのが面倒なロックの問題もあります。Cアプリは、LVがファイルを書き込んでいる間はファイルを読み取ることができず、その逆も同様であり、余分な遅延が発生する可能性があります。
補足として、上記の各アプローチはプッシュモデルまたはプルモデルのいずれかを使用していることがわかります(TCPモデルは両方の方法で実装できます)。これは、どちらの方向に進むかの最終決定に影響を与える可能性があります。プッシュ=LVはCアプリを直接、プル= Cアプリはフラグをポーリングするか、LVに値を要求する必要があります。