Как работает OnTimer() в индикаторе МТ4?

 

Вопрос скорее адресован к разработчикам МТ4 и заключается в следующем. 

Насколько известно, индикаторы МТ4 работают в одном потоке. Допустим, в терминале запущены 20 индикаторов, у каждого включен таймер на 100 мс.

Что будет в случае, если:

Один из индикаторов отработает событие OnTimer() за 150 мс? Все индикаторы пропустят свое событие OnTimer() до следующего раза? 

Вообще, непонятно, как устроены таймеры в MQL4/5. То ли используются функции Windows, то ли эти события как-то генерируются средой исполнения?

Для меня важна точность срабатывания таймера, отсюда вопросы.  

 
Alexey Volchanskiy:

Вопрос скорее адресован к разработчикам МТ4 и заключается в следующем. 

Насколько известно, индикаторы МТ4 работают в одном потоке. Допустим, в терминале запущены 20 индикаторов, у каждого включен таймер на 100 мс.

Что будет в случае, если:

Один из индикаторов отработает событие OnTimer() за 150 мс? Все индикаторы пропустят свое событие OnTimer() до следующего раза? 

Вообще, непонятно, как устроены таймеры в MQL4/5. То ли используются функции Windows, то ли эти события как-то генерируются средой исполнения?

Для меня важна точность срабатывания таймера, отсюда вопросы.  

Так у каждого же свой таймер.
 
Artyom Trishkin:
Так у каждого же свой таймер.

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

Ведь, если плясать от печки, от виндового таймера приходит сообщение в окно, а что уж делать с этим сообщением - решает программа, в данном случае МТ4. 

 

Даже ОС не гарантирует доставку сообщений (тем более от таймера), поэтому пропуски возможны.

Каждый эксперт и каждый индикатор работает со своим таймером, и получает события только от него. При завершении работы mql4-программы таймер уничтожается принудительно, если он был создан, но не был отключен функцией EventKillTimer().

Так что не все пропустят. Единственное, если операции в индикаторе нагрузят систему так, что ОС не будет откликаться... тогда уж... RIP 

EventKillTimer - Документация на MQL4
  • docs.mql4.com
EventKillTimer - Документация на MQL4
 
Eugeniy Lugovoy:

Даже ОС не гарантирует доставку сообщений (тем более от таймера), поэтому пропуски возможны.

Каждый эксперт и каждый индикатор работает со своим таймером, и получает события только от него. При завершении работы mql4-программы таймер уничтожается принудительно, если он был создан, но не был отключен функцией EventKillTimer().

Так что не все пропустят. Единственное, если операции в индикаторе нагрузят систему так, что ОС не будет откликаться... тогда уж... RIP 

То есть, если один таймер отрабатывает свое событие OnTimer и в это время приходит сообщение от другого таймера, оно становится в очередь? Индикаторы-то в одном потоке, типа этакой кооперативной многозадачности а-ля Win 3.*
 
Alexey Volchanskiy:
То есть, если один таймер отрабатывает свое событие OnTimer и в это время приходит сообщение от другого таймера, оно становится в очередь? Индикаторы-то в одном потоке, типа этакой кооперативной многозадачности а-ля Win 3.*
http://forum.mql4.com/ru/62194/page4
EventSetTimer,OnTimer - MQL4 форум
  • www.mql5.com
EventSetTimer,OnTimer - MQL4 форум
 
Vasyl Nosal:
http://forum.mql4.com/ru/62194/page4

Спасибо, там хоть про эксперты объяснили. Но про индикаторы вопрос открыт. Я там написал коммент, но, похоже, на mql4.com уже новые посты не добавляются. Дублирую тут

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

А что происходит с индикаторами - они же все работают в одном потоке? У них в очередь тоже будет помещено лишь по одному событию тика и таймера на ВСЕ индикаторы? Или как это обрабатывается? 

 
Alexey Volchanskiy:

...Насколько известно, индикаторы МТ4 работают в одном потоке. Допустим, в терминале запущены 20 индикаторов, у каждого включен таймер на 100 мс.

Что будет в случае, если...

Думаю, опытным путем вы сами быстрее разберетесь. Создайте простой индикатор с таймером и Print(описание). И запустите 20 штук в терминале.
 
Oksana Berenko:
Думаю, опытным путем вы сами быстрее разберетесь. Создайте простой индикатор с таймером и Print(описание). И запустите 20 штук в терминале.

Вы правы, уже думал над этим. Только надо будет индюки нагрузить, а то 20 штук пустышек ничего не покажут.

Вот почему программисты на MQL должны ставить какие-то эксперименты для выяснения вещей, которые не лежат на поверхности? Просто вспомнилось, как хомы взахлеб хвалили документацию MQL, типа, убогий MSDN даже рядом со справкой MQL не валялся )) 

 

Alexey Volchanskiy:

...Вот почему программисты на MQL должны ставить какие-то эксперименты для выяснения вещей, которые не лежат на поверхности?...

Так это ж интересно - самому копаться, узнавать. А то на блюдечке с каемочкой - скучно.

Буду ждать выводы эксперимента.

 
Oksana Berenko:

Так это ж интересно - самому копаться, узнавать. А то на блюдечке с каемочкой - скучно.

Буду ждать выводы эксперимента.

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