Вопрос скорее адресован к разработчикам МТ4 и заключается в следующем.
Насколько известно, индикаторы МТ4 работают в одном потоке. Допустим, в терминале запущены 20 индикаторов, у каждого включен таймер на 100 мс.
Что будет в случае, если:
Один из индикаторов отработает событие OnTimer() за 150 мс? Все индикаторы пропустят свое событие OnTimer() до следующего раза?
Вообще, непонятно, как устроены таймеры в MQL4/5. То ли используются функции Windows, то ли эти события как-то генерируются средой исполнения?
Для меня важна точность срабатывания таймера, отсюда вопросы.
Так у каждого же свой таймер.
Вопрос - как это устроено внутри и насколько таймеры друг на друга влияют в одном потоке. В случае с экспертами более-менее понятно - у каждого свой поток.
Ведь, если плясать от печки, от виндового таймера приходит сообщение в окно, а что уж делать с этим сообщением - решает программа, в данном случае МТ4.
Даже ОС не гарантирует доставку сообщений (тем более от таймера), поэтому пропуски возможны.
Каждый эксперт и каждый индикатор работает со своим таймером, и получает события только от него. При завершении работы mql4-программы таймер уничтожается принудительно, если он был создан, но не был отключен функцией EventKillTimer().
Так что не все пропустят. Единственное, если операции в индикаторе нагрузят систему так, что ОС не будет откликаться... тогда уж... RIP
Даже ОС не гарантирует доставку сообщений (тем более от таймера), поэтому пропуски возможны.
Каждый эксперт и каждый индикатор работает со своим таймером, и получает события только от него. При завершении работы mql4-программы таймер уничтожается принудительно, если он был создан, но не был отключен функцией EventKillTimer().
Так что не все пропустят. Единственное, если операции в индикаторе нагрузят систему так, что ОС не будет откликаться... тогда уж... RIP
То есть, если один таймер отрабатывает свое событие OnTimer и в это время приходит сообщение от другого таймера, оно становится в очередь? Индикаторы-то в одном потоке, типа этакой кооперативной многозадачности а-ля Win 3.*
http://forum.mql4.com/ru/62194/page4
Спасибо, там хоть про эксперты объяснили. Но про индикаторы вопрос открыт. Я там написал коммент, но, похоже, на mql4.com уже новые посты не добавляются. Дублирую тут
Все события в эксперте обрабатываются в одном потоке (собственном потоке эксперта), последовательно, без прерываний. События помещаются во входящую очередь эксперта и их обработчики вызываются строго в порядке очередности (fifo). Одновременно в очереди может находится только одно событие тика и одно событие таймера (т.е. если эксперт не успел взять на обработку событие тика, то дополнительное событие в очередь не помещается, с таймером - аналогично).
А что происходит с индикаторами - они же все работают в одном потоке? У них в очередь тоже будет помещено лишь по одному событию тика и таймера на ВСЕ индикаторы? Или как это обрабатывается?
...Насколько известно, индикаторы МТ4 работают в одном потоке. Допустим, в терминале запущены 20 индикаторов, у каждого включен таймер на 100 мс.
Что будет в случае, если...
Думаю, опытным путем вы сами быстрее разберетесь. Создайте простой индикатор с таймером и Print(описание). И запустите 20 штук в терминале.
Вы правы, уже думал над этим. Только надо будет индюки нагрузить, а то 20 штук пустышек ничего не покажут.
Вот почему программисты на MQL должны ставить какие-то эксперименты для выяснения вещей, которые не лежат на поверхности? Просто вспомнилось, как хомы взахлеб хвалили документацию MQL, типа, убогий MSDN даже рядом со справкой MQL не валялся ))
Alexey Volchanskiy:
...Вот почему программисты на MQL должны ставить какие-то эксперименты для выяснения вещей, которые не лежат на поверхности?...
Так это ж интересно - самому копаться, узнавать. А то на блюдечке с каемочкой - скучно.
Буду ждать выводы эксперимента.
Так это ж интересно - самому копаться, узнавать. А то на блюдечке с каемочкой - скучно.
Буду ждать выводы эксперимента.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вопрос скорее адресован к разработчикам МТ4 и заключается в следующем.
Насколько известно, индикаторы МТ4 работают в одном потоке. Допустим, в терминале запущены 20 индикаторов, у каждого включен таймер на 100 мс.
Что будет в случае, если:
Один из индикаторов отработает событие OnTimer() за 150 мс? Все индикаторы пропустят свое событие OnTimer() до следующего раза?
Вообще, непонятно, как устроены таймеры в MQL4/5. То ли используются функции Windows, то ли эти события как-то генерируются средой исполнения?
Для меня важна точность срабатывания таймера, отсюда вопросы.