Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками" - страница 6

 
Mihail Matkovskij:
Какое смещение (input int MessageBroadcast) для пользовательских событий должно быть, если в программе используются элементы UI из стандартной библиотеки (Include\Controls\)? Как это можно узнать?

Я не большой знаток библиотеки. Судя по определению событий в файле Defines.mqh, там максимальный зарезервированный индекс - 100.

 
Stanislav Korotky:

Я не большой знаток библиотеки. Судя по определению событий в файле Defines.mqh, там максимальный зарезервированный индекс - 100.

//+------------------------------------------------------------------+
//| Events                                                           |
//+------------------------------------------------------------------+
#define ON_CLICK                (0)   // clicking on control event
#define ON_DBL_CLICK            (1)   // double clicking on control event
#define ON_SHOW                 (2)   // showing control event
#define ON_HIDE                 (3)   // hiding control event
#define ON_CHANGE               (4)   // changing control event
#define ON_START_EDIT           (5)   // start of editing event
#define ON_END_EDIT             (6)   // end of editing event
#define ON_SCROLL_INC           (7)   // increment of scrollbar event
#define ON_SCROLL_DEC           (8)   // decrement of scrollbar event
#define ON_MOUSE_FOCUS_SET      (9)   // the "mouse cursor entered the control" event
#define ON_MOUSE_FOCUS_KILL     (10)  // the "mouse cursor exited the control" event
#define ON_DRAG_START           (11)  // the "control dragging start" event
#define ON_DRAG_PROCESS         (12)  // the "control is being dragged" event
#define ON_DRAG_END             (13)  // the "control dragging end" event
#define ON_BRING_TO_TOP         (14)  // the "mouse events priority increase" event
#define ON_APP_CLOSE            (100) // "closing the application" event

Очевидно, что от 15 до 99 разработчики оставили запас для новых id событий. Но помимо этого мне бросилась в глаза еще одна константа.

#define CONTROLS_MAXIMUM_ID                 (10000)  // maximum number of IDs in application

Максимальный номер или максимальное количество идентификаторов в приложении. Что это может значить?...

 
Mihail Matkovskij:

Очевидно, что от 15 до 99 разработчики оставили запас для новых id событий. Но помимо этого мне бросилась в глаза еще одна константа.

Максимальный номер или максимальное количество идентификаторов в приложении. Что это может значить?...

Судя по словам - идентификаторы контролов. Контролы - не события.

 
Stanislav Korotky:

Судя по словам - идентификаторы контролов. Контролы - не события.

Возможно... Но там не написано какие идентификаторы. Поставил MessageBroadcast 10000 и всё работает. Можно поставить хоть 1000000 и больше, тип ushort позволяет. Хотя и со 100 конфликтов не будет. В любом случае у любого элемента UI есть свой id, который проверяется в условиях обработки событий. В общем, вероятность нормальной работы довольно большая.

 
Было бы неплохо если бы главный эксперт мог получать загруженность процессора, чтобы знать, сколько задач можно добавить на выполнение. Но такой функции я, к сожалению, не нашел в документации.
 
Stanislav Korotky #:


Как это должно быть разработано теперь, когда в MT5 есть сервисы?

 
bot #:

Как это должно быть разработано теперь, когда в MT5 есть сервисы?

Это ничего не меняет, поскольку нет более простого способа связи с сервисом MT5.
 

Действительно хорошая статья.

Однако у меня возникают проблемы при попытке компиляции с metatrader 5.

Ожидается инициализация последовательности для массива:

в шаблоне 'const TYPETOBYTES::STRUCT_TYPE<T> TYPETOBYTES::FillBytes(const uchar)' specified with [T=uchar] TypeToBytes.mqh 314 31

Я понимаю, что это проблема инициализации массива. Я могу попытаться исправить это. Однако я не вижу ни одного отчета об этой проблеме, и мне интересно, только ли я сам столкнулся с этой проблемой.

В любом случае, спасибо за статью, она замечательная!



 
magnomilk #:

Очень хорошая статья.

Однако у меня возникают проблемы при попытке компиляции с metatrader 5.

Ожидается инициализация последовательности для массива:

в шаблоне 'const TYPETOBYTES::STRUCT_TYPE<T> TYPETOBYTES::FillBytes(const uchar)', указанном с [T=uchar] TypeToBytes.mqh 314 31

Я понимаю, что это проблема инициализации массива. Я могу попытаться исправить это. Однако я не вижу ни одного сообщения об этой проблеме, и мне интересно, только ли я сам столкнулся с этой проблемой.

В любом случае, спасибо за статью, она замечательная!



Убедитесь, что вы используете последнюю версию библиотеки TypeToBytes.

 
Igor K #:

Подтверждаю, что на дефолтовых настройках скрипт не работает - получаю ту же самую "WebRequest error code 4002".. 


MetaTrader 5

Version: 5.00 build 2093

02 Jul 2019


===cut here===

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 error code 4002

===cut here===


Для WebRequest разрешены только порты 80 (http) и 443 (https).