Anatoli, я думал об этом, но это ведь огромная задержка, фигура будет мерцать (появляться и исчезать), не выход это.
Если гарантий порядка никаких нет, то можно было бы задействовать lparam или dparam (всё равно они не работают приCHARTEVENT_OBJECT_DELETE). Можно пердавать в них инициатора удаления (например, 0 - вручную, 1 - из мкл кода).
МК как всегда многословны, вопросы порядка - это большая тайна? Застопорился на этой мелочи и не могу продвинуться дальше.
pavlick_: Anatoli, я думал об этом, но это ведь огромная задержка, фигура будет мерцать (появляться и исчезать), не выход это.
Если гарантий порядка никаких нет, то можно было бы задействовать lparam или dparam (всё равно они не работают при CHARTEVENT_OBJECT_DELETE). Можно пердавать в них инициатора удаления (например, 0 - вручную, 1 - из мкл кода).
МК как всегда многословны, вопросы порядка - это большая тайна? Застопорился на этой мелочи и не могу продвинуться дальше.
Сделайте краткий пример и обозначьте проблему на результате его теста. Так понятнее будет, что подсказать, если есть проблема и есть ли вообще.
Anatoli Kazharski: Сделайте краткий пример и обозначьте проблему на результате его теста. Так понятнее будет, что подсказать, если есть проблема и есть ли вообще.
Спасибо за попытку помочь, я подумаю как полаконичней сделать пример, и выложу позже.
Существуют ли основания/гарантии того, что следующие предположения верны:
Существует эксперт, который содержит обработчик OnChartEvent. Из другого скрипта сначала отправляем пользовательское событие через EventChartCustom, а потом удаляем графический объект с графика, что приводит к отправке обработчику CHARTEVENT_OBJECT_DELETE. Обработчик получит события в том порядке, который наблюдает скрипт (сначала пользовательское, а потом CHARTEVENT_OBJECT_DELETE).
Возвращает
true в случае удачной постановки пользовательского события в очередь
событий графика – получателя события. В случае ошибки возвращает false,
для получения кода ошибки используйте GetLastError().
Обращаем внимание на слово "очередь". Оно тут не случайно употребляется.
Обращаем внимание на слово "очередь". Оно тут не случайно употребляется.
т.е. ответом на следующий вопрос будет да?
Выходные закончились, надеюсь получить ответ от сотрудников МК. Господа, допустим имеем:
1.
Скрипт, который шлёт пользовательское событие графику через
EventChartCustom() ("событие 1"), потом удаляет графический объект с
графика (это генерирует CHARTEVENT_OBJECT_DELETE "собыие 2"), шлёт пользовательское событие через EventChartCustom() ("событие 3").
2. Эксперт, который содержит обработчик OnChartEvent().
Гарантируется
ли то, что эксперт получит события в следующем порядке (и не в каком
другом): "событие 1", "событие 2", "событие 3" ?
Andrey Khatimlianskii: А событие удаление объекта создастся гарантированно до выхода из функции ObjectDelete? Там нет асинхронности, связанной с перерисовкой чарта?
Эта функция лишь размещает команду на удаление объекта в очереди чарта. Согласно заявленному порядку, в очереди чарта она появится после размещения в той же очереди пользовательского события через EventChartCustom. А значит во входящей очереди событий эксперта события будут появляться согласно последовательности процессинга очереди чарта. Т.е. пользовательское событие и только потом событие удаления объекта.
До или после выхода из функции ObjectDelete это произойдет - не имеет отношения к поставленному вопросу (последовательность обработки). Хотя ассинхронность процессинга работы с объектами в данном случае конечно есть, т.е. для гарантии процессинга удаления объекта (процессинга очереди чарта) нужно вызвать ChartRedraw().
Эта функция лишь размещает команду на удаление объекта в очереди чарта. Согласно заявленному порядку, в очереди чарта она появится после размещения в той же очереди пользовательского события через EventChartCustom. А значит во входящей очереди событий эксперта события будут появляться согласно последовательности процессинга очереди чарта. Т.е. пользовательское событие и только потом событие удаления объекта.
До или после выхода из функции ObjectDelete это произойдет - не имеет отношения к поставленному вопросу (последовательность обработки). Хотя ассинхронность процессинга работы с объектами в данном случае конечно есть, т.е. для гарантии процессинга удаления объекта (процессинга очереди чарта) нужно вызвать ChartRedraw().
Ну началось, асинхронность, постановка в очередь )). Скрипт делает примерно это:
EventChartCustom(); // событие 1
ObjectDelete(); // событие 2
EventChartCustom(); // событие 3
Раз ObjectDelete() это постановка в очередь, т.е. функция не дожидается фактического удаления (возможно), то событие 3 может вполне оказаться раньше события 2 (их приём в OnChartEvent). Может и не так, но с ваших слов как-то так получается.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
pavlick_:
Хотя не выйдет ничего, ну пошлю я из индикатора сообщение, как я его в эксперте отловлю, когда подтверждение необходимо получить находясь в OnTimer?Принять сообщение в OnChartEvent() и сохранить результат в глобальной переменной.
Сообщения можно отсылать не только другим программам на одном графике, но даже и на другие графики.
Anatoli, я думал об этом, но это ведь огромная задержка, фигура будет мерцать (появляться и исчезать), не выход это.
Если гарантий порядка никаких нет, то можно было бы задействовать lparam или dparam (всё равно они не работают при CHARTEVENT_OBJECT_DELETE). Можно пердавать в них инициатора удаления (например, 0 - вручную, 1 - из мкл кода).
МК как всегда многословны, вопросы порядка - это большая тайна? Застопорился на этой мелочи и не могу продвинуться дальше.pavlick_:
Anatoli, я думал об этом, но это ведь огромная задержка, фигура будет мерцать (появляться и исчезать), не выход это.
Если гарантий порядка никаких нет, то можно было бы задействовать lparam или dparam (всё равно они не работают при CHARTEVENT_OBJECT_DELETE). Можно пердавать в них инициатора удаления (например, 0 - вручную, 1 - из мкл кода).
МК как всегда многословны, вопросы порядка - это большая тайна? Застопорился на этой мелочи и не могу продвинуться дальше.
Сделайте краткий пример и обозначьте проблему на результате его теста. Так понятнее будет, что подсказать, если есть проблема и есть ли вообще.
Здравствуйте.
Существуют ли основания/гарантии того, что следующие предположения верны:
Существует эксперт, который содержит обработчик OnChartEvent. Из другого скрипта сначала отправляем пользовательское событие через EventChartCustom, а потом удаляем графический объект с графика, что приводит к отправке обработчику CHARTEVENT_OBJECT_DELETE. Обработчик получит события в том порядке, который наблюдает скрипт (сначала пользовательское, а потом CHARTEVENT_OBJECT_DELETE).
https://www.mql5.com/ru/docs/eventfunctions/eventchartcustom
Внимательно читаем:
Возвращаемое значение
Возвращает true в случае удачной постановки пользовательского события в очередь событий графика – получателя события. В случае ошибки возвращает false, для получения кода ошибки используйте GetLastError().
Обращаем внимание на слово "очередь". Оно тут не случайно употребляется.
https://www.mql5.com/ru/docs/eventfunctions/eventchartcustom
Внимательно читаем:
Обращаем внимание на слово "очередь". Оно тут не случайно употребляется.
т.е. ответом на следующий вопрос будет да?
Выходные закончились, надеюсь получить ответ от сотрудников МК. Господа, допустим имеем:
1. Скрипт, который шлёт пользовательское событие графику через EventChartCustom() ("событие 1"), потом удаляет графический объект с графика (это генерирует CHARTEVENT_OBJECT_DELETE "собыие 2"), шлёт пользовательское событие через EventChartCustom() ("событие 3").
2. Эксперт, который содержит обработчик OnChartEvent().
Гарантируется ли то, что эксперт получит события в следующем порядке (и не в каком другом): "событие 1", "событие 2", "событие 3" ?т.е. ответом на следующий вопрос будет да?
Да, термин "очередь" определяет именно такой порядок доступа к данным.
А событие удаление объекта создастся гарантированно до выхода из функции ObjectDelete? Там нет асинхронности, связанной с перерисовкой чарта?
Эта функция лишь размещает команду на удаление объекта в очереди чарта. Согласно заявленному порядку, в очереди чарта она появится после размещения в той же очереди пользовательского события через EventChartCustom. А значит во входящей очереди событий эксперта события будут появляться согласно последовательности процессинга очереди чарта. Т.е. пользовательское событие и только потом событие удаления объекта.
До или после выхода из функции ObjectDelete это произойдет - не имеет отношения к поставленному вопросу (последовательность обработки). Хотя ассинхронность процессинга работы с объектами в данном случае конечно есть, т.е. для гарантии процессинга удаления объекта (процессинга очереди чарта) нужно вызвать ChartRedraw().
Эта функция лишь размещает команду на удаление объекта в очереди чарта. Согласно заявленному порядку, в очереди чарта она появится после размещения в той же очереди пользовательского события через EventChartCustom. А значит во входящей очереди событий эксперта события будут появляться согласно последовательности процессинга очереди чарта. Т.е. пользовательское событие и только потом событие удаления объекта.
До или после выхода из функции ObjectDelete это произойдет - не имеет отношения к поставленному вопросу (последовательность обработки). Хотя ассинхронность процессинга работы с объектами в данном случае конечно есть, т.е. для гарантии процессинга удаления объекта (процессинга очереди чарта) нужно вызвать ChartRedraw().
Ну началось, асинхронность, постановка в очередь )). Скрипт делает примерно это:
EventChartCustom(); // событие 1
ObjectDelete(); // событие 2
EventChartCustom(); // событие 3
Раз ObjectDelete() это постановка в очередь, т.е. функция не дожидается фактического удаления (возможно), то событие 3 может вполне оказаться раньше события 2 (их приём в OnChartEvent). Может и не так, но с ваших слов как-то так получается.