Поток событий. Как контролировать и сделать событие idle ? (+ решено) - страница 5

 
Yedelkin:

ОК, понятно. TheXpert поднял волну, и понеслась.

Не ну я с вас фигею. Я еще и виноват в том что вы с народом общаться не умеете?

У эксперта потребляемая память фиксированная, если

(1) нет эмуляции буферов

(2) нет рисования объектами на истории.

(3) нет багов с выделением памяти. Но это обычно видно при деините.

(4) нет багов работы с индюками. Если у индюка достается буфер на весь размер -- это баг.

Если есть (1) или (2) жор легко отследить тестером + диспетчером. Лечится контролем размеров.

События сами по себе памяти вообще не жрут (по нарастающей). Поэтому если в эксперте проблемы нет, проблема точно в индюке.

Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
TheXpert:

У эксперта потребляемая память фиксированная, если

(1) нет эмуляции буферов

(2) нет рисования объектами на истории.

(3) нет багов с выделением памяти. Но это обычно видно при деините.

(4) нет багов работы с индюками. Если у индюка достается буфер на весь размер -- это баг.

Если есть (1) или (2) жор легко отследить тестером + диспетчером. Лечится контролем размеров.

События сами по себе памяти вообще не жрут (по нарастающей). Поэтому если в эксперте проблемы нет, проблема точно в индюке.

Огромное спасибо за развёрнутый ответ. Буду обмозговывать. (1) - (3) точно нет.

Про (4) прошу пояснить: что значит "если у индикатора достаётся буфер на весь размер", чтобы в догадках не теряться.

Про "Если есть (1) или (2) жор легко отследить тестером + диспетчером" прошу уточнить:  т.е. предлагаете использовать тестер не только для измерения скорости программы, но и для измерения потребляемого объёма? Мда; такое простое решение, даже в голову не приходило!

Далее. Получается, что если эксперт построен с использованием динамических объектов, то памяти фиксированной у него быть не может. С другой стороны, сообщений о некорректной работе с динамическими объектами не поступает; сколько уже раз удалял и запускал эксперт..

В общем, мозговой штурм натолкнул на банальную, казалось бы, идею: если не получается разделить объёмы совместно работающих программ, то придётся запускать их по отдельности и смотреть, у кого растёт потребление. При этом эксперт запускать не от привычного ему индикатора, а, допустим, от тиков на своём же графике. Учитывая Вашу подсказку про тестерное измерение объёма, вообще всё получается гладко. Может быть это имел в виду Рош, отсылая к статье?.. Но всё равно, при повторном чтении статьи такой мысли и в голову не приходило. Без подсказки - никуда!

TheXpert:

Не ну я с вас фигею. Я еще и виноват в том что вы с народом общаться не умеете? 

Вина - виной, волна - волной :) 

А Вашу точку зрения насчёт моей крайней невоспитанности я уже уловил и заранее извинился :) Несмотря на это моя невоспитанность говорит мне, что продуктивнее говорить  за себя, а не за народ :) Мы же не в Госдуме :)

 
Yedelkin:

Про (4) прошу пояснить: что значит "если у индикатора достаётся буфер на весь размер", чтобы в догадках не теряться.

Здесь я имею в виду, что если у графика скажем 100000 баров и эксперт вытягивает буфер для всех 100000 баров -- это неправильно.

Про "Если есть (1) или (2) жор легко отследить тестером + диспетчером" прошу уточнить:  т.е. предлагаете использовать тестер не только для измерения скорости программы, но и для измерения потребляемого объёма? Мда; такое простое решение, даже в голову не приходило!

Ну... имеется в виду запустить тестер и где-нибудь (в диспетчере задач виндовом например) отслеживать выделение памяти. Не очень надежный способ, но если проблема в эксперте, скорее всего жор памяти будет очень большим.

В общем, мозговой штурм натолкнул на банальную, казалось бы, идею: если не получается разделить объёмы совместно работающих программ, то придётся запускать их по отдельности и смотреть, у кого растёт потребление.

Ну так ее собственно и развивал...
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
Документация по MQL5: Основы языка / Переменные / Создание и уничтожение объектов
  • www.mql5.com
Основы языка / Переменные / Создание и уничтожение объектов - Документация по MQL5
 
sergeev:
...

То есть например при клике на объекте - событие CHARTEVENT_OBJECT_CLICK прийдет не сразу, а только после того как произойдет изымание всех преыдущих событий из очереди.
А как вы понимаете очередь событий наглухо забивается EventChartCustom.

... 

Alex, у меня немного похожая проблема сейчас. То есть сразу же после инициализации эксперта всё работает отлично. Какое-то время не захожу вообще в терминал, делаю попытку переключиться с одной информационной пользовательской панели на другую и программа "тупит". Может даже несколько секунд зависать пока произойдёт переключение. Это тот же случай? 

Пока не пробовал Ваше решение, занят другим вопросом, но обязательно попробую, так как сам решения у себя не нашёл. Пока есть один вопрос. 

В Вашем примере в функции OnChartEvent() пять параметров. Что за  iview

ulong event_idle=0; bool bidle;
//---
void OnChartEvent(int iview, int id, long lparam, double dparam, string sparam)
  {
    if(id==CHARTEVENT_CUSTOM+VM_IDLE)
      {
        if(event_idle>(ulong)lparam || bidle) // если последнее посланное больше чем пришедшее, то сразу выходим
          {
           bidle=event_idle > (ulong)lparam;
           //---
           if(bidle) return;
           //---
           event_idle=0;
          } 
        event_idle++;
        ChartRedraw(m_chart); // обновили чарт
        EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика
        return; 
      }
    EventChartCustom(m_chart, VM_IDLE, (long)event_idle, 0, ""); // отправили событие с указанием последнего счетчика

    /*
        обработка остальных событий
    */
  }
 
tol64:

Alex, у меня немного похожая проблема сейчас. То есть сразу же после инициализации эксперта всё работает отлично. Какое-то время не захожу вообще в терминал, делаю попытку переключиться с одной информационной пользовательской панели на другую и программа "тупит". Может даже несколько секунд зависать пока произойдёт переключение. Это тот же случай?

да, именно этот. У вас между вызовами OnChartEvent отправлется более одного раза EventChart. Сделайте ту предлагаемую мной добавку по анализу пришедшего номера события и проблема уйдет.

В Вашем примере в функции OnChartEvent() пять параметров. Что за  iview

Случайно в заголовок функции затесался. Не обращайте внимание.

Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
Читаю и диву даюсь - сколько же энергии у людей)) Эх, где мои 17 лет!
 

tol64:

sergeev:
...

То есть например при клике на объекте - событие CHARTEVENT_OBJECT_CLICK прийдет не сразу, а только после того как произойдет изымание всех преыдущих событий из очереди.
А как вы понимаете очередь событий наглухо забивается EventChartCustom.

Народ, ну прочитайте же пункт 1.1 вот этого сообщения. Обсуждаемую там информацию преподнесли сегодня, можно считать, что официально. Ну не может (при таком раскладе) быть теперь в очереди таких явлений, как "предыдущие" event-события и "глухое забивание" очереди функцией EventChartCustom. ...Либо нужно официальное опровержение новой информации из Справочника.

TheXpert, благодарю за пояснения. 

 
Yedelkin:

Народ, ну прочитайте же пункт 1.1 вот этого сообщения. Обсуждаемую там информацию преподнесли сегодня, можно считать, что официально. Ну не может (при таком раскладе) быть теперь в очереди таких явлений, как "предыдущие" event-события и "глухое забивание" очереди функцией EventChartCustom. ...Либо нужно официальное опровержение новой информации из Справочника.

это типа цирк продолжается?
 
sergeev:
это типа цирк продолжается?

Если расцениваете, как цирк, - смело удаляйте. Или постарайтесь ответить по существу.

 
а вы задали уже новый вопрос?
Причина обращения: