記事"DIY マルチスレッド非同期 MQL5 WebRequest"についてのディスカッション - ページ 6

 
Mihail Matkovskij:
標準ライブラリ(IncludeControls)からのUIエレメントがプログラムで使用されている場合、ユーザー・イベントの オフセット(input intMessageBroadcast)は何にすべきですか?どうすればわかりますか?

私はライブラリの専門家ではありません。Defines.mqhファイルのイベントの定義から判断すると、予約されたインデックスの最大値は100です。

 
Stanislav Korotky:

私はライブラリーの専門家ではありません。Defines.mqhファイルのイベントの定義から判断すると、予約されたインデックスの最大値は100です。

//+------------------------------------------------------------------+
//| イベント|
//+------------------------------------------------------------------+
#define  ON_CLICK                (0)   // コントロールイベントのクリック
#define  ON_DBL_CLICK            (1)   // コントロールイベントのダブルクリック
#define  ON_SHOW                 (2)   // コントロールイベントを表示する
#define  ON_HIDE                 (3)   // コントロールイベントを隠す
#define  ON_CHANGE               (4)   // 制御イベントの変更
#define  ON_START_EDIT           (5)   // 編集イベントの開始
#define  ON_END_EDIT             (6)   // 編集イベントの終了
#define  ON_SCROLL_INC           (7)   // スクロールバー・イベントのインクリメント
#define  ON_SCROLL_DEC           (8)   // スクロールバー・イベントのデクリメント
#define  ON_MOUSE_FOCUS_SET      (9)   // "マウスカーソルがコントロールに入った "イベント
#define  ON_MOUSE_FOCUS_KILL     (10)  // "マウスカーソルがコントロールを離れた "イベント
#define  ON_DRAG_START           (11)  // "コントロールドラッグ開始 "イベント
#define  ON_DRAG_PROCESS         (12)  // "コントロールがドラッグされる "イベント
#define  ON_DRAG_END             (13)  // "コントロールドラッグ終了 "イベント
#define  ON_BRING_TO_TOP         (14)  // "マウスイベントの優先度が上がる "イベント
#define  ON_APP_CLOSE            (100) // アプリケーションを閉じる」イベント

明らかに、開発者は15から99まで、新しいイベントIDのためのリザーブを残している。しかし、これに加えて、もう一つの定数が私の目を 引いた

#define  CONTROLS_MAXIMUM_ID                 (10000)  // アプリケーション内のIDの最大数

アプリケーション内のidの最大数。これは何を意味するのだろうか?

 
Mihail Matkovskij:

明らかに、15歳から99歳まで、開発者たちは新しいイド・イベントのための余白を残している。しかし、これに加えてもうひとつ、私の目を 引いた ものがある。

アプリケーション内のidの最大数。これは何を意味するのだろうか?

言葉によれば、コントロールの識別子である。コントロールはイベントではない。

 
Stanislav Korotky:

言葉から判断する - コントロールの識別子。コントロールはイベントではない。

そうかもしれない。でも、何の識別子かは書いてない。MessageBroadcastを 10000に設定したら、すべてうまくいった。1000000でもそれ以上でも設定できる。100でもコンフリクトは起きないが。いずれにせよ、UIエレメントには固有のidがあり、イベント処理の 条件でチェックされる。一般に、正常に動作する確率はかなり高い。

 
もしメイン・エキスパートがCPU負荷を取得して、実行可能なタスク数を知ることができればいいのだが。しかし、残念ながら、そのような機能はドキュメントに見当たらない。
 
Stanislav Korotky #:


MT5にサービスがある今、これはどのように設計されるのでしょうか?

 
bot #:

MT5にサービスがある今、これはどのように設計されるのでしょうか?

MT5のサービスと簡単に通信する方法はないので、何も変わりません。
 

本当に素晴らしい記事です。

しかし、メタトレーダー5でコンパイルしようとすると問題が発生します。

配列の初期化が期待されます:

in template 'const TYPETOBYTES::STRUCT_TYPE<T> TYPETOBYTES::FillBytes(const uchar)' specified with [T=uchar] TypeToBytes.mqh 314 31

配列の初期化の問題だと理解しています。私はそれを修正しようとすることができました。しかし、この問題についての報告は見当たらないので、この問題に直面しているのは自分だけなのかもしれない。

とにかく素晴らしい記事をありがとう!



 
magnomilk #:

本当にいい記事だ。

しかし、メタトレーダー5でコンパイルしようとすると問題が発生します。

配列の初期化シーケンスが期待されます:

in template 'const TYPETOBYTES::STRUCT_TYPE<T> TYPETOBYTES::FillBytes(const uchar)' specified with [T=uchar] TypeToBytes.mqh 314 31

配列の初期化の問題だと理解しています。それを修正することもできます。しかし、この問題についての報告は見当たりません。この問題に直面しているのは私だけなのでしょうか?

とにかく素晴らしい記事をありがとう!



最新のTypeToBytesライブラリを使用していることを確認してください。

 
Igor K "WebRequest error code 4002" が表示されます.. .。


メタトレーダー5

バージョン: 5.00 ビルド 2093

2019/07/02


===ここからカット

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Accepted: aQuotesTerminalD0E8209F77CF37AD8BF550E51FF075MQL5Expertsmultiwebclient.ex5::USDJPY_PERIOD_H1_2_12896816915443359 after 0 retries

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) WebRequest エラーコード 4002

===ここをカット====


WebRequestで許可されているのは80番ポート(http)と443番ポート(https)のみです。