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

 

При запуске терминала советник на графике проверяет наличие глобальной переменной и в случае ее отсутствия создает ее и устанавливает свой номер. Графики клиенты посылают сообщения чарту-менеджеру.

Затем пользователь закрывает окно с чартом-менеджером. Клиенты посылают запросы окну, которое больше не существует. 

Иначе говоря в статье обошли вниманием проблему смены чарта-менеджера. То есть стоит только закрыть управляющий график и вся схема рушится.

 
Алексей Барбашин:

При запуске терминала советник на графике проверяет наличие глобальной переменной и в случае ее отсутствия создает ее и устанавливает свой номер. Графики клиенты посылают сообщения чарту-менеджеру.

Затем пользователь закрывает окно с чартом-менеджером. Клиенты посылают запросы окну, которое больше не существует. 

Иначе говоря в статье обошли вниманием проблему смены чарта-менеджера. То есть стоит только закрыть управляющий график и вся схема рушится.

В статье предложена технология и её минимальная реализация. Проверка на все возможные проблемные ситуации выходила за рамки статьи. Клиенты могут проверять существование чарта по его ID (доступен через pool.getManagerID). Все исходные коды открыты.

Обращаю внимание, что в процессе развития идеи, изложенной в статье, была разработана схема упрощенной многопоточной обработки запросов с помощью объектов. Там указанной проблемы нет "by design". Исходники также приложены в этой ветке. Так что рекомендуется пользоваться ими.

 
Stanislav Korotky:

В статье предложена технология и её минимальная реализация. Проверка на все возможные проблемные ситуации выходила за рамки статьи. Клиенты могут проверять существование чарта по его ID (доступен через pool.getManagerID). Все исходные коды открыты.

Обращаю внимание, что в процессе развития идеи, изложенной в статье, была разработана схема упрощенной многопоточной обработки запросов с помощью объектов. Там указанной проблемы нет "by design". Исходники также приложены в этой ветке. Так что рекомендуется пользоваться ими.

Я видел развитие темы )) Но к сожалению использование объектов "чарт" доступно, как и было указано, только в МТ5.

 
Stanislav Korotky:

Встроенный календарь - довольно общий, так что полезной профильной информации для скачивания из сторонних источников по-прежнему остается много. Причем, это не только новости, но и сигналы, и котировки с криптовалютных бирж и пр. Задумка по поводу использования параллельных потоков для вычислений, а не веб-запросов, есть, но пока не реализована. Но я не понял про сервисы. Имеются в виду сервисы как программы MQL5? MQ не предоставила для них никакой двусторонней связи с другими программами (невозможно переслать туда "задание" на расчет и получить результат). Так что эти сервисы отпадают.

Спасибо. По сервисам Вы все правильно поняли. Эксперты-вычислители и явились прямым ответом. Чрезвычайно интересно. Еще раз Спасибо.
 
Какое смещение (input int MessageBroadcast) для пользовательских событий должно быть, если в программе используются элементы UI из стандартной библиотеки (Include\Controls\)? Как это можно узнать?
 
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, который проверяется в условиях обработки событий. В общем, вероятность нормальной работы довольно большая.

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