2台のMT4端末間のデータ交換? - ページ 3

 
granit77:
goldtrader: ある EA が書き込み用にファイルを開き、そのファイルを開いたまま、別の EA が読み込み用に同じファイルを開く(または開こうとする)と、競合状態になるのではないでしょうか?
科学の力を信じている私としては、ちょっとドラマチックな状況だと思います。10人と同じように読むことができますが、書くためにチェックを使用することができ、フラグを禁止する、など純粋に技術的な問題であり、障害ではありません。これは純粋に技術的な問題であり、障害にはなりません。以前からAPIを使ってどこからでもファイルの読み書きが行われてきました。このほかにも、これまで使われていなかった端末間の情報伝達の方法があり、興味深い。例えば、Windowsの環境変数という形で情報を転送する場合。
私もそう思います。また、ファイルなしでのデータ転送を可能にすることで、より速く、より確実なデータ転送を実現したい。でも、まだ誰も何も言ってないと思うから、みんなファイルによる転送に固執してるんだよ((
 
goldtrader:
gravity001:

一方のEAがファイルに書き込み続け、もう一方のEAがファイルから読み込み続けるので問題はなく、その順番は関係ありません。データの関連性をチェックするために、ローカルタイムを使いました。つまり、引用文は100ミリ秒ごとに書き込まれ、ローカルタイムによって関連性がチェックされるのです。


あるEAが書き込み用にファイルを開いている間に、別のEAが読み込み用に同じファイルを開く(または開こうとする)と、競合状態にならないのでしょうか?
いいえ、競合ではありません。なぜなら、書き込み用に開かれているファイルでも、いつでも読むことができるからです。しかし、同じファイルを同時に2回書き込みのために開くと、衝突が発生します。
 
zhuki:

ちなみに、terminal.exeを4回クリックすると、同じターミナルのコピーが2つ開くので、パスが同じであることが必要です。

クリックしてみたが、うまくいかない。本当に使えるの?
 
gravity001:

また、ファイルなしでデータ転送を行いたい、その方が速いし確実だ。でも、今のところ誰も何も言わないから、みんなファイル経由の転送で止まっているんだと思う(((^^;)

2つのアプリケーションのために、アクセス権付きのメモリ領域を確保することは可能ですか?

この手のエラーを誘発するのは、ある意味、明確な対立でもあるんです。




0009 0x0009 無効なメモリ管理アドレス

0998 0x03E6 無効なメモリアドレスのアクセス試行

あるアプリケーションが、アクセス権のないメモリアドレスにアクセスしようとする


 
D500_Rised:
問題は、 この点です。

ファイルなしでもデータを渡したい、その方が速いし信頼できる。でも、まだ誰も何も言ってないと思うから、みんなファイルによる転送に固執してるんだよ((

2つのアプリケーションのために、アクセス権付きのメモリ領域を確保することは可能ですか?

この手のエラーを誘発するのは、ある意味、明確な対立でもあるんです。




0009 0x0009 無効なメモリ管理アドレス

0998 0x03E6 無効なメモリアドレスのアクセス試行

あるアプリケーションが、アクセス権のないメモリアドレスにアクセスしようとする


もしかしたら、できないかもしれない、はっきりとはわからない。こちらのスレッド https://forum.mql4.com/ru/3393 では、GlobalAddAtomについて書かれています。もし私の考えが正しければ、この方法はファイルなしで、つまりメモリを通して変数を渡すことができます。でも、やり方がわからない((


例も挙げていただきましたが、どのように試したか教えてください。

 

Windowsのクリップボードは、メモリアドレスの制限なしにアプリケーションから読み書き可能なのです。

Буфер обмена (clipboard)- набор функций и сообщений, который делает возможным передачу данных в прикладные программы, разработанные при помощи Microsoft ® Win32 ® прикладного программного интерфейса (API). Поскольку все прикладные программы имеют доступ к буферу обмена, данные могут быть легко перемещаемы между приложениями или внутри прикладной программы.

しかし、ここにも車輪の中の小さな棒がある。

クリップボードはユーザーが操作できます。ウィンドウは、ユーザからのコマンドに応答してのみクリップボードとの間でデータを転送しなければならない。 ウィンドウは、ユーザに通知することなくデータを転送するためにクリップボードを使用してはならない。

ということで、APIのみ:^(

 
D500_Rised:

あ、また思いつきました。 Windowsのクリップボードは、アプリケーションからメモリアドレスの制限なく読み書き可能なんだそうです

クリップボードとはMicrosoft® Win32® アプリケーション・プログラミング・インターフェース API)を使用して設計されたアプリケーション・プログラムにデータを転送するための関数とメッセージの集合体です。すべてのアプリケーションプログラムがクリップボードにアクセスできるため、アプリケーション間やアプリケーションプログラム内でのデータの移動が容易に行えます。

しかし、ここにも車輪の中の小さな棒がある。

クリップボードはユーザーが操作できます。ウィンドウは、ユーザーからのコマンドに応答してのみ、クリップボードとの間でデータを転送する必要があります。ウィンドウは、ユーザーに通知することなくデータを転送するためにクリップボードを使用してはならない。

ということで、APIのみ:^(

明確なように見えるが、どのように実装するのか、もう少し具体的に教えてください。
 

Win32のAPIを自分で勉強するか、仕事を受けてくれるコーダーを探すか。ここではあまり選択肢はありません。

しかし、私見では、このシステムはコストに見合うものではありません。

 
gravity001:
zhuki さん

念のため、terminal.exeを4回クリックすると、同じターミナルが2枚開き、パスも同じになるはずです。

クリックしてみたが、うまくいかない。本当に効果があるのか?
もう一度やってみたら、同じ端末が2つ開いている。 自分で思いついたわけではなく、昔から知られていることだ。
 
以下は、ディスカッションの様子です https://forum.mql4.com/ru/9244#49606