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

 
Реter Konow:

そんなに危険なんですか?メモリ解放のエラー...

独立したスレッドをプログラミングする場合、開発者はデバイスコンテキストとリソースがOSの要求に応じて解放されることを保証する必要があり、開発者が低レベルコマンドを使用する場合は、使用したすべてのリソースを自分で解放しなければなりません。ここで再び私が書いたポイントに - ググった情報を使って一度書く "Hello World"https://www.mql5.com/ru/forum/318593/page5#comment_12572558、あなたは多くのことを理解するでしょう、あなたのための仕事の99%がシステムプログラマによって行われたことを理解するでしょう。

Metakvotのプログラマーは、MQLプログラムが正しく動作しない場合に備えて、ターミナルが動作するように配慮しています。

 
Andrey Pogoreltsev:

マルチスレッド - タスクが複数のスレッドで実行されます。シングルプロセッサで動作させることができ、なおかつマルチスレッドで、プロセッサの時間枠がなくなると切り替えて動作させることができます。共有リソースへのアクセスに同期を必要とする。デッドロック、レースコンディション、メモリ解放 バグ、その他の「驚き」につながる可能性があります。

非同期 - 通常は他のデバイス(ネットワーク機器、ストレージデバイス、周辺機器など)上でブロックされない関数実行(つまり、メソッド終了後すぐに制御が戻る)。 たとえば、1つのスレッドとエンドマシン処理のクライアント接続のみを使用して、高性能なマルチユーザーサーバーを書くことが可能です。すべては、このサーバーの目的次第です。

あなたの場合、WinAPIを使って大量のコネクションを作成する必要があり、それらのコネクションの状態をタイムアウト付きのWaitForMultipleObjectsでチェックできるので、例えばタイマーのスレッドを保持する必要がありません。

PS.理論的には、IOCompletionPortを使うこともできますが、より多くの知識と慎重な設計が必要です。

まあ...お互いを知り尽くした

 
ビタミンや微量栄養素が足りていないのかも...。
 
Roman:

有益な回答ありがとうございました ))
何がどこにあるのか、説明してきてください。
また、Eventloopを 使った非同期コードを標準的な手段で書くにはどうしたらよいでしょうか。

全てはドキュメントに書かれています。

まずは読んでみて、何か書いてみることから始めてみてはいかがでしょうか。

また、できない場合は、フォーラムで質問してください。

今のところ、何の話もない。


 
Koldun Zloy:

全てはドキュメントに書かれています。

まずは読んでみて、何か書いてみることから始めてみてはいかがでしょうか。

また、できない場合は、フォーラムで質問してください。

今のところ、何の話もない。


このトピックは何のために作られたと思いますか?
非同期コードの書き方を普通に教えてくれて、ドキュメントで見せてくれるんですね。
非同期リクエスト送信の他に、Callback機能、EventLoopの制御、Waitなどの場所を示す。
ユーザーにはそのような機能はありませんし、ドキュメントにも載っていませんから、答えようがないでしょうけど。
まさに会話は何もない、このスレッドにいるのは、コミュニケーションの話題を理解しているAndrey Pogoreltsevだけ です。

 
Euentloop!Euentloopをお持ちの方はいらっしゃいますか?ユエントループがないと、この街は盛り上がらない!?誰かEuentloopを!
 

ローマン 2019.07.27 09:30

このトピックは何のために作られたと思いますか?


マルチスレッドについてお聞きしました。ないんです。

でも、それも今は気にしなくていいんです。

ローマン 2019.07.27 09:30

標準的な手段で非同期コードを書く方法を教えてくれ、それをドキュメントで見せてくれるのですね。
非同期リクエスト送信の他に、Callback機能、EventLoopの制御、Waitなどの場所を示してください。
ユーザーにはそのような機能はありませんし、ドキュメントにも載っていませんので、回答はできないと思います。
まさに会話は何もない、このスレッドにいるのは、コミュニケーションの話題を理解しているAndrey Pogoreltsevだけ です。

すべてお見せすることができます。しかし、何の意味があるのでしょうか?

必要なものは、自分で探す。

明らかにドキュメントや記事を読んでいませんね。
 
Koldun Zloy:

マルチスレッドについてお聞きしました。マルチスレッドはありません。

マルチスレッドは、https://www.mql5.com/ru/docs/runtime/running 、 つまり、タスクを並列化し、複数のグラフを開きたいのです(残念ながら、私はまだサービス機能を使ってみていません - たぶん、それを使えばもっと簡単になるのでは?) を作成し、そこに別スレッドで動作する我々のEAを取り付け、同期とデータ交換の問題を解決する (タスク)

私は5回もTSを尋ねた。なぜ取引端末が必要なのか...。無為自然

取引端末らしくないクライアント・サーバー型のアプリケーションで見かけるのですが、もしかして、誰かがサーバーに統計を送るのに便利なのでしょうか?- まあ、すでに用意された例(記事)を書いているのですがhttps://www.mql5.com/ru/articles/5337

ソースは読みやすく、記事の質も優れている。ソースを修正することで、複数のスレッドで並列計算を行うことができる......。さて、何を計算すればいいのでしょうか?)))

 
Igor Makanu:

この例は、Windowsにおけるデバイスコンテキストと割り当てられたリソースの取得に関する一般原則に関するものです。独立したスレッドをプログラミングする場合、開発者はOSが要求するときにデバイスコンテキストとリソースを解放することを保証しなければなりません。ここで再び私が書いたポイントに - ググった情報を使って一度書く "Hello World" https://www.mql5.com/ru/forum/318593/page5#comment_12572558、 あなたは多くのことを理解するでしょう、あなたのための仕事の99%がシステムプログラマによって行われたことを理解するでしょう。

言い換えれば、MQL環境での作業は、Metakvotのプログラマーが代わりに行ってくれたのです。

OK、反論なし、納得。独学でスレッドを正しく理解することは、独学のコーダーには無理があり、重大なエラーを引き起こす可能性があります。"マッチは子供のおもちゃではない"。しかし、1つのプログラムの中でマルチスレッドを実現する何らかの方法が必要です。

サービスを順次起動してもエラーにならないし、各サービスはそのスレッドで実行されるという単純なロジックがあるのです。つまり、機構はすでに構成され、デバッグもされているのです。よかったです。エキスパートアドバイザーのコードにこれらのサービスを特別なモジュールで記述することです。各モジュールは同じサービスになります。そして、これらのモジュールを順次コンパイルし、同時に実行することです。それだけです。

要するに、何も変わらないのです。サービスだけがフクロウのコードの中に書き込まれます。コンパイルも動作も同じでしょう。EAがチャートから削除されると、それらは削除されます。このようにして、マルチスレッドのEAを得ることができる。

 
さらにシンプルにすることができます。Expert Advisor は、必要なサービス自体をロードしますが、それは別途記述されます。チャートから取り外すと、それらを停止させます。Expert Advisorからサービスの開始を追加するだけです。そして、スレッド間の内部的な相互作用はプログラマーの仕事である。リソースの力を借りて解決します。