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

 

Yedelkin:

Соответственно, до сих пор непонятно, с какой примерно частотой следует отправлять пользовательские события, чтобы они не переполняли очередь событий терминала...

видно сразу, что вы не прочитали мои посты.
 
Yedelkin:

Не могу найти ответа на вопрос: как влияет переполнение очереди событий на размер оперативной памяти? Если очередь событий оказалась переполненной, то куда деваются события, переполнившие очередь? Освобождается ли часть оперативной памяти, зарезервированной под те события, которые оказались "за бортом истории"?

Может быть, вопросы мои терминологически не выдержаны, но (надеюсь) суть проблемы передают. 

Очередь динамическая и растет по необходимости.

Но при определенном пределе новые события отбрасываются, так как понятно, что дальше смысла нагружать очередь нет.

 
sergeev:
видно сразу, что вы не прочитали мои посты.

Почему же "не прочитал"? Вы решали свою проблему, я пытаюсь решить свою, другого плана. Когда читал обсуждение, ответа на свои вопросы не нашёл.

На мой же основной вопрос Вы не ответили. :/    Вот это точно "видно сразу" :)

 
Renat:

Очередь динамическая и растет по необходимости.

Но при определенном пределе новые события отбрасываются, так как понятно, что дальше смысла нагружать очередь нет.

Хорошо, очередь - "динамическая". Увеличивается до неких "определённых" пределов. Но почему никто не может дать ответа на простой, казалось бы, вопрос: как влияет переполнение очереди событий на размер оперативной памяти

Вопросы вдогонку: Сколько оперативной памяти требуется для "содержания" переполненной очереди событий? Если "при определенном пределе новые события отбрасываются", то освобождается ли оперативная память, отданная ранее под эти отброшенные события?

Цель вопросов: понять, каким образом поток пользовательских событий может увеличивать (увеличивает) размер потребляемой терминалом оперативной памяти. 

 
Yedelkin:

 Если очередь событий оказалась переполненной, то куда деваются события, переполнившие очередь? Освобождается ли часть оперативной памяти, зарезервированной под те события, которые оказались "за бортом истории"?

Может быть, вопросы мои терминологически не выдержаны, но (надеюсь) суть проблемы передают. 

В разделе сказано Выполнение программ, что новые события при переполнении очереди отбрасываются :

Клиентский терминал отсылает возникающие события в соответствующие открытые графики. Также события могут генерироваться графиками (события графика) либо mql5-программами (пользовательские события).  Генерацию событий создания и удаления графических объектов на графике можно включать и отключать заданием свойств графика CHART_EVENT_OBJECT_CREATE и CHART_EVENT_OBJECT_DELETE. Каждая mql5-программа и каждый график имеют свою собственную очередь событий, куда складываются все вновь поступающие события.

Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь.

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

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

Библиотеки не обрабатывают никаких событий.

 
Yedelkin:

Почему же "не прочитал"? Вы решали свою проблему, я пытаюсь решить свою, другого плана. Когда читал обсуждение, ответа на свои вопросы не нашёл.

На мой же основной вопрос Вы не ответили. :/    Вот это точно "видно сразу" :)


Ваш вопрос "с какой примерно частотой следует отправлять пользовательские события, чтобы они не переполняли очередь"

мой ответ на первой странице - "с частотой вызова OnChartEvent".


То есть одно событие - один OnChartEvent.  Не должно быть более двух событий в промежутке.

Вот и вся математика.

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

 
Yedelkin:

Цель вопросов: понять, каким образом поток пользовательских событий может увеличивать (увеличивает) размер потребляемой терминалом оперативной памяти. 

Зачем? Ну да, увеличивает. Цена вопроса несколько мегабайт.

Проблема не в этом или не совсем в этом.

 
Rosh:

В разделе сказано Выполнение программ, что...:

1. Раздел Справочника претерпел существенные изменения.

1.1. Например, раньше было: "Все возникающие события клиентский терминал складывает в общую очередь. Таким образом события обрабатываются одно за другим в порядке поступления. Исключение составляет событие NewTick. Если в очереди уже есть такое событие либо это событие находится в состоянии обработки, то новое событие NewTick в очередь не ставится".

Теперь же: "Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь".

Как говорится, "Почувствуйте разницу". Предупредили бы хоть. :/ Это изменение в корне меняет принцип подхода к работе с пользовательскими событиями. блин.  

1.2. Далее. Принцип отбрасывания событий перевёрнут с ног на голову. Раньше было: "Очередь событий имеет ограниченный размер. При переполнении очереди старые события удаляются без обработки для того, чтобы освободить место для вновь поступающих событий".

Теперь же: "При переполнении очереди новые события отбрасываются без постановки в очередь". Как говорится, спасибо: теряем самые актуальные пользовательские события.

2.  В процитированном разделе Справочника нет ответов на мои основные вопросы: Как влияет переполнение очереди событий на размер оперативной памяти? Сколько оперативной памяти требуется для "содержания" переполненной очереди событий? Если "при определенном пределе новые события отбрасываются", то освобождается ли оперативная память, отданная ранее под эти отброшенные события?

 

TheXpert:

Yedelkin:

Цель вопросов: понять, каким образом поток пользовательских событий может увеличивать (увеличивает) размер потребляемой терминалом оперативной памяти. 

Зачем? Ну да, увеличивает. Цена вопроса несколько мегабайт.

Странный вопрос: "Зачем?" - Отвечаю: понять, чтобы сделать выводы.
 
Yedelkin:

2.  В процитированном разделе Справочника нет ответов на мои основные вопросы: Как влияет переполнение очереди событий на размер оперативной памяти? Сколько оперативной памяти требуется для "содержания" переполненной очереди событий? Если "при определенном пределе новые события отбрасываются", то освобождается ли оперативная память, отданная ранее под эти отброшенные события?

Если возникают такие проблемы, то всё очень плохо. Думаю, переаолненная очередь событий - это последнее место, где нужно искать проблемы с памятью.

Если событие отбрасывается, значит оно просто не ставится в очередь. Память не растет.

Причина обращения: