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

 
Алексей Тарабанов:

2つ、または22のスレッドは、同期または非同期のいずれかになります。1つのスレッドには、同期と非同期の両方の操作を含めることができます。方法を示していますね。パラレルは、パラレルなものを含む方法を知らない。

まあ、そうなんですけどね。1つのスレッドに並列計算を 含めることはできません。同期および非同期の操作は、1つまたは複数のスレッドで実行することができます。ただ、シングルスレッド非同期は基本的に最適化された処理シーケンスであり、マルチスレッド非同期と比べると安定性で劣る。1つのスレッドに障害が発生しても、システムは動作を継続し、停止したプロセスの動作は他のスレッドに切り離され、サービス性を維持することができます。スレッドが1つしかない場合は、システムがカパカパになります)。

1つのスレッドでゼロによるランダムな割り算をして終わり。
 

例:スレッド1で動作する同期関数があり、スレッド2、3、4からのデータを待ち、スレッド5、6、7、8に分散した関数が結果を待っている状態です。

全員が立ち上がり、結果を待ちます。さて、ここで注意してほしいのは、同期関数がそのスレッドからのデータを待っている場合はどうするかということだ。そして、神は、このデータは、その結果に依存している?

 
Реter Konow:

1つのスレッドでゼロによるランダムな割り算をして終わり。

いや、それだけではありません。

 
Алексей Тарабанов:

例:スレッド1で動作する同期関数があり、スレッド2、3、4からのデータを待ち、スレッド5、6、7、8に分散した関数が結果を待っている状態です。

全員が立ち上がり、結果を待ちます。さて、ここで注意してほしいのは、同期関数がそのスレッドからのデータを待っている場合はどうするかということだ。そして、神は、このデータは、その結果に依存するのですか?

よし、自分で答えよう。

キャンバスが点滅を開始します。

 
Koldun Zloy:

すでにMT開発会社の担当者から聞いていることを翻訳します。

MQLからスレッドを作成することはできません。WinAPIでもダメ。

これは、自分でDLLを書くことによってのみ可能です。


MQL5Include﹑WinAPI﹑processthreadsapi.mqh にラッパー
HANDLE CreateThread(PVOID thread_attributes,ulong stack_size,PVOID start_address,PVOID parameter,uint creation_flags,uint &thread_id) があるので、これを使用します。

しかし、MQLを通したトラックをどうすればいいのか。だから、DLLを作ってそこで作業するようにと書かれているのです。


 

Alexei Tarabanov:

例:スレッド1で動作する同期関数があり、スレッド2、3、4からのデータを待ち、スレッド5、6、7、8に分散した関数が結果を待っている状態です。

全員が立ち上がり、結果を待ちます。さて、ここで注意してほしいのは、同期関数がそのスレッドからのデータを待っている場合はどう するかということだ。そして、神は、このデータは、その結果に依存するのですか?

Alexei Tarabanov:

よし、自分で答えよう。

キャンバスが点滅を開始します。

ハイライトに意味はありません。

他のトラックについては、データの準備ができるまで、待機します。何も点滅しません。