Есть ли система прерываний при обработки событий MT4. Если при обработке события NewTick обработчиком OnTick, происходит событие Timer, то какой сценарий выполняется:

 
  • 46% (21)
  • 13% (6)
  • 17% (8)
  • 24% (11)
Всего проголосовало: 46
 

По данной теме нашел только описание https://book.mql4.com/ru/special/index исходя из которого вроде бы верный вариант 3.

На Рис. 159 показано, что тик, пришедший в период исполнения start(), а именно в момент t 4, не приводит к новому запуску специальной функции, и в следующий раз start() запускается в момент t 5. При этих условиях также возникает пауза между окончанием текущего исполнения и началом следующего исполнения функции start(). 

Рис. 159 Различная скважность при исполнении функции start(), запускаемой клиентским терминалом, и зацикленной функции start(). 

 Рис. 159 Различная скважность при исполнении функции start(),

запускаемой клиентским терминалом, и зацикленной функции start().

О сложных программах - Учебник по MQL4
О сложных программах - Учебник по MQL4
  • book.mql4.com
О сложных программах - Учебник по MQL4
 

Кроме того в описании https://docs.mql4.com/ru/runtime/running сказано следующее:

Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql4-программы не ставится. Аналогично, если в очереди mql4-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь. Обработка событий таймера производится по такой же схеме – если в очереди находится или уже обрабатывается событие Timer, то новое событие таймера не ставится в очередь. 

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

События клиентского терминала - Программы MQL4 - Справочник MQL4
События клиентского терминала - Программы MQL4 - Справочник MQL4
  • docs.mql4.com
События клиентского терминала - Программы MQL4 - Справочник MQL4
 

Ситуация наоборот, если обрабатывается OnTimer() и поступает новый тик уже рассматривалась и ответ был от разработчиков - "OnTick()" игнорируется.

А в этой ситуации, на мой взгляд, разумно было-бы выполнить по завершению обработки OnTick(). Ведь если таймер вызывается достаточно редко, скажем 1 раз в 15-20 секунд, то пропускать его не целесообразно.

На самом деле не знаю и ткну первый вариант чтобы видеть результат ответов других.

 
Alexey Viktorov:

Ситуация наоборот, если обрабатывается OnTimer() и поступает новый тик уже рассматривалась и ответ был от разработчиков - "OnTick()" игнорируется.

А в этой ситуации, на мой взгляд, разумно было-бы выполнить по завершению обработки OnTick(). Ведь если таймер вызывается достаточно редко, скажем 1 раз в 15-20 секунд, то пропускать его не целесообразно.

На самом деле не знаю и ткну первый вариант чтобы видеть результат ответов других.

Если можно, приведите пожалуйста ссылку на ответ разработчиков.
 
Yury Kirillov:
Если можно, приведите пожалуйста ссылку на ответ разработчиков.

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

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

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

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

Здесь говорится о том что если одно событие обрабатывается то повторно оно-же в очередь не ставится, игнорируется.
Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Я уже спрашивал. Ничто не прерывается и в очередь не ставится.

Кто первый тот и папа:)))) 

 
Yury Kirillov:

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

EventSetTimer,OnTimer

Anton, 2014.04.04 15:28

Все события в эксперте обрабатываются в одном потоке (собственном потоке эксперта), последовательно, без прерываний. События помещаются во входящую очередь эксперта и их обработчики вызываются строго в порядке очередности (fifo). Одновременно в очереди может находится только одно событие тика и одно событие таймера (т.е. если эксперт не успел взять на обработку событие тика, то дополнительное событие в очередь не помещается, с таймером - аналогично).

 
Stanislav Korotky:

Пусть в очередь попало событие тика - и его начал обрабатывать обработчик тиков, до завершения обработки в очередь попадает событие таймера. Что при этом будет с обработкой этого события? Обработается после завершения события тика или будет проигнорировано? С последовательностью однотипных событий всё понятно. Интересует именно обработка разнородных событий.
 
Yury Kirillov:
Пусть в очередь попало событие тика - и его начал обрабатывать обработчик тиков, до завершения обработки в очередь попадает событие таймера. Что при этом будет с обработкой этого события? Обработается после завершения события тика или будет проигнорировано? С последовательностью однотипных событий всё понятно. Интересует именно обработка разнородных событий.

Таймер обработается.

Потеряться может только при переполнении очереди событий (теоретически). 

 
Yury Kirillov:
Пусть в очередь попало событие тика - и его начал обрабатывать обработчик тиков, до завершения обработки в очередь попадает событие таймера. Что при этом будет с обработкой этого события? Обработается после завершения события тика или будет проигнорировано? С последовательностью однотипных событий всё понятно. Интересует именно обработка разнородных событий.
пока тик не досчитается, событие таймера будет висеть в очереди.  И наоборот. Параллельность в принципе невозможна - слишком много общих данных.