文章 "自己动手开发多线程异步 MQL5 WebRequest" - 页 6

 
Mihail Matkovskij:
如果程序中使用了标准库(Include\Controls\)中的用户界面 元素,那么用户事件 的偏移量(输入 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 事件留出了余地。但除此之外,还有一个常量 引起了 我的注意。

应用程序中 ID 的最大或最多数量。这意味着......什么?

根据字面意思--控制标识符。控件不是事件。

 
Stanislav Korotky:

从字面上判断--控制标识符。控制不是事件。

也许吧...但没说是什么标识符。我设置了MessageBroadcast 10000,一切正常。你甚至可以设置 1000000 或更多,ushort 类型允许这样做。即使是 100 也不会有冲突。无论如何,任何用户界面元素都有自己的 id,在事件处理 条件中都会对其进行检查。一般来说,正常运行的概率相当高。

 
如果主专家能够获得 CPU 负载,从而知道可以添加多少任务来执行,那就更好了。但遗憾的是,我在文档中没有找到这样的功能。
 
Stanislav Korotky #:


既然 MT5 中已经有了服务,该如何设计?

 
bot #:

既然 MT5 中已经有了服务,该如何设计?

这不会改变什么,因为与 MT5 服务进行通信没有更简单的方法。
 

文章写得很好。

不过,当我尝试用 metatrader 5 进行编译时,我遇到了一些问题。

预期数组的初始化序列:

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

我知道这是个启动数组的问题。我可以尝试修复它。不过,我没有看到任何关于这个问题的报告,不知道是否只有我自己遇到了这个问题。

谢谢你的文章,无论如何都很精彩!



 
magnomilk #:

真是一篇好文章。

不过,我在尝试使用 metatrader 5 进行编译时遇到了问题。

预期数组的初始化序列:

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

我知道这是一个启动数组的问题。我可以尝试修复它。但是,我没有看到任何关于这个问题的报告,不知道是否只有我自己遇到了这个问题。

无论如何,还是要感谢你的文章,非常精彩!



请确保您使用的是最新的 TypeToBytes 库。

 
Igor K "WebRequest 错误代码 4002"....


MetaTrader 5

版本:5.00 版本 2093

2019 年 7 月 02 日


===在此剪切===

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Accepted: aQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::USDJPY_PERIOD_H1_2_128968169154443359 after 0 retries

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) WebRequest 错误代码 4002

===在此剪切===


WebRequest 只允许端口 80(http)和 443(https)。