MQLによる非同期・マルチスレッドプログラミング - ページ 4

 
フォーラムユーザーの皆様へ。

マルチスレッドを扱うには、まず非同期、マルチスレッド、マルチプロセス実行の本質的な違いを学ばないと、自分のロジックすら理解できないところがあるからです。まず第一に。

第二に、外部DLLの 呼び出しはまだ残っており、複数のスレッドを持つ独自のライブラリを実装し、それを差し込むことを誰が妨げるのでしょうか?

第三に、mqlのマルチスレッドはどのようなタスクに必要なのでしょうか?

もちろん、同期オブジェクトをまだ覚えなければならないことは言うまでもありません。必要ですか?もしそうなら、あなたのためにDLLを書くのはとても簡単な仕事です。
 
Roman:

つまり、DLL_PROCESS_ATTACH: で初期化すれば、mqlプログラムから呼び出すのに十分なのでしょうか?

mql プログラムから dll にある関数を呼び出す。

 
Dmitry Fedoseev:

mqlプログラムから、DLLにあるその関数を呼び出す。

また、そのサインを記述することの何が問題なのでしょうか?何らかの方法でメソッドシグネチャからwinapiを引っ張ってきているのではありませんか?
 
Andrey Pogoreltsev:
そして、そのサインを記述することの何が問題なのか?何らかの方法でメソッドシグネチャからwinapiを引っ張ってきているのではありませんか?

すみません、なぜ描写するのでしょうか?そして、ごめんなさい、何も引いてませんでした))

 
Dmitry Fedoseev:

すみません、なぜ描写するのでしょうか?そして、ごめんなさい、何も引いてませんでした))

すみません、もう聞いているのかと思いました。
 
Andrey Pogoreltsev:
フォーラムユーザーの皆様へ。

マルチスレッドを扱うには、まず非同期、マルチスレッド、マルチプロセス実行の本質的な違いを学ばないと、自分のロジックすら理解できないところがあるからです。それは1つです。

次に、外部DLLの 呼び出しはまだ残っており、複数のスレッドを持つ独自のライブラリを実装して、それを差し込むことを誰が止めるのでしょうか?

第三に、mqlのマルチスレッドはどのようなタスクに必要なのでしょうか?

もちろん、まだ同期オブジェクトを覚えなければならないことは言うまでもありません。必要ですか?そうすれば、DLLを書くのはとても簡単です。

アンドレイ 非同期とマルチスレッドは別物であることは、誰もが理解していると思います。
WinAPI インルールに CreateThread() 関数が記述されているため、スレッドが使用できることが前提となっています。
IDEに記述されているCreateTask()のような関数がないため、非同期でコードを書くことが可能という前提が勝手に消えてしまう。
そのため、糸に重点を置きました。しかし、結局のところ、記述されている関数はWinAPIのプロトタイプに過ぎないことが判明しました。
繰り返しますが、課題は純粋なWinAPIを使うことであり、記述されているプロトタイプCreateThread()は誤解を招きやすいものでした。これがプロトタイプであるとは、どこにも書いてありません。
すべてのタスクは異なるので、非同期メソッドにたどり着き、常に非同期またはスレッドで記述するのが良いと考えています。
そして、常に非同期で書く習慣を身につけることで、高速なプログラムが書けるようになり、スペシャリストとしてのレベルも上がります。
それは、開発者自身の基本理念である、mqlプログラムの実行速度が、私たちの全てなのです!

mqlにそのような機能がないのは残念です。
私は、非同期プログラミングのための標準的なmql関数を開発することをmql管理者に提案 する。
スレッドの問題や、なによりもセキュリティの問題がありますから。
非同期モードについては、安全上の問題はないと思います。

ロジックの例

mqlのEventLoopの実装を工夫してください。
MqlTask クラスを作成します。
タスクをMqlTaskオブジェクトobjとして宣言します。
タスクの作成 タスク = obj.CreateTask(MyFunc());
execute success = task -> Run();
実行の一時停止 成功 = task -> SleepMs(ms);
成功待ち = タスク -> 待機(ms);
無期限に待つ success = task -> Wait(0);
deleteタスクを実行した後、タスクを削除する。

と、それを制御するための様々なgetStatusがあります。

 
Roman:

アンドレイ 非同期モードとマルチスレッドは別物だということは、誰もが理解していることだと思います。
WinAPIのinluderにはCreateThread()関数があり、スレッドが使えると思い込んでいた。
IDEにはCreateTask()のような関数が記述されていないため、非同期コードの記述の可能性は考慮しない方がよいでしょう。
そのため、糸に重点を置きました。しかし、結局のところ、記述されている関数はWinAPIのプロトタイプに過ぎないことが判明しました。
繰り返しますが、課題は純粋なWinAPIを使うことであり、記述されているプロトタイプCreateThread()は誤解を招きやすいものでした。これがプロトタイプであるとは、どこにも書いてありません。
すべてのタスクは異なるので、非同期メソッドにたどり着き、常に非同期またはスレッドで記述するのが良いと考えています。
そして、常に非同期で書く習慣を身につけることで、高速なプログラムを書くことができ、スペシャリストとしてのレベルも上がります。
それは、開発者自身の基本理念である、mqlプログラムの実行速度が、私たちの全てなのです!
mqlにそのような機能がないのが残念なので、mqlチームに提案して、mqlの標準機能を開発することにします
は、スレッドの問題や、なによりもセキュリティの問題があるため、非同期プログラミングには向いていません。
非同期モードでもセキュリティ上の支障はないかと思います。
ループ輪の実装を工夫し、その輪の中でタスクを実行すること。

メソッドを非同期で実行するか、マルチスレッドで実行するか、決めてください。mqlから非同期でソケットを扱うなどしています。

これが署名であることはすぐにわかったが、安全な仮想実行環境での内部実装はどうなっているのだろうか。そして、それをどのようにイメージしていますか?

そして、もう一度。スレッドの扱い方を知っている人は、簡単にそのためのDLLを書き、そこですべての作業を行うことができます。

そして、そうです、私が間違っていなければ、同じ注文を作成し、ネットワークを操作するための非同期メソッドが、mqlに存在します。他に非同期化する必要があるメソッドはありますか?そして、そのすべての実用性はどうなのか。

1スレッドの速度が足りないケースをいくつか教えてください。
 
Andrey Pogoreltsev:
メソッドを非同期で実行するか、マルチスレッドで実行するか、決めてください。私は、例えば、mqlから非同期でソケットを操作しています。

これが署名であることはすぐにわかったが、安全な仮想実行環境での内部実装はどうなっているのだろうか。また、それをどのように想定していますか?

そして、もう一度。スレッドの扱い方を知っている人は、簡単にそのためのDLLを書き、そこですべての作業を行うことができます。

そして、そうです、私が間違っていなければ、mqlは同じ注文を作成し、ネットワークで動作する非同期メソッドを備えています。他に非同期化する必要があるメソッドはありますか?そして、その実用性はどうなのか。

1つのスレッドで動作させるのに、速度が足りないケースをいくつか教えてください。

mqlで使用可能なものと禁止されているものを判断するためです。
CreateThread() はinludesにあったので、 スレッドで動作可能 なのでは?
しかし、スレッドが禁止されていることが判明し、非同期を選択することになりましたが、mqlで非同期をどのように使用するかも明確ではありません。
そう、まさにそれがソケットの問題点なのです。ヘルプによると、128ソケット以上は作成できないとのことで、例えばアメリカ株の情報を得るにも限界がある。
そして、その128ソケットでさえ、非同期モードに変換して、受信データの処理に遅れが出ないようにする方法は明確ではありません。
そのため、別の方法で解決策を探すことになったのですが、自作のDLLを使わず、純粋なWinAPIで解決 したかったのです。
また、mqlで非同期で動作させる方法面白いですね、もし動作例があれば、情報を共有しながら議論できると良いですね。
しかし、mqlのヘルプにある標準的な非同期メソッドは私は見ていません。

 
Roman:

mqlで使用可能なものと禁止されているものを判断するためです。
コードのインジェクタに CreateThread()があったので、スレッドを扱えると 思ったのです。
しかし、スレッドが禁止されていることが判明し、非同期を選択することになりましたが、mqlで非同期をどのように使用するかも明確ではありません。
そう、まさにそれがソケットの問題点なのです。ヘルプによると、128ソケット以上は作成できないとのことで、例えばアメリカ株の情報を得るにも限界がある。
そして、その128ソケットでさえ、非同期モードに変換して、受信データの処理に遅れが出ないようにする方法は明確ではありません。
そのため、別の方法で解決策を探すことになったのですが、自作のDLLを使わず、純粋なWinAPIで解決 したかったのです。
また、mqlで非同期で動作させる方法面白いですね、もし動作例があれば、情報を共有しながら議論できると良いですね。
しかし、mqlのヘルプにある標準的な非同期メソッドは私は見ていません。

winapi経由でソケットと非同期で動作させたい場合は、winsock2を使用してください。

WSARecvとWSASendをOVERLAPPEDと WSAEVENTで試してみて ください

それからWaitFor...
 

スマートな参加者を読んで、不思議に思ったことがあります。

このようなギミックに何の意味があるのでしょうか?

MQLでは、マルチスレッドはいつ必要なのでしょうか? 私にとっては、標準的な方法で実装されているストラテジーテストの用途しかありません。

理想を言えば、複数のWebRequestを 実行することに意味があるかもしれませんが、マルチスレッドは全く必要ないと思います。

そもそもマルチスレッドが必要なタスクとは何でしょうか?