Всем привет,
кто знает ответ на вопрос: как обстоит дела с очередью в OnTimer ? тоесть допустим есть OnTimer с 1 секундой, соответственно код внутри OnTimer выполняется например 5 секунд
значит ли это, что в очередь выполнения OnTimer выставится 5 приказов на исполнение OnTimer?
это лекго можно проверить в тесте
Всем привет,
кто знает ответ на вопрос: как обстоит дела с очередью в OnTimer ? тоесть допустим есть OnTimer с 1 секундой, соответственно код внутри OnTimer выполняется например 5 секунд
значит ли это, что в очередь выполнения OnTimer выставится 5 приказов на исполнение OnTimer?
в советнике точно не придут сообщения
в индикаторе крайне не рекомендуется - там один поток на терминал на все индюки, проверяли, все виснет
в сове можно
Никто не читает документацию...
https://www.mql5.com/ru/docs/eventfunctions/eventsettimer
Для каждой программы может быть запущено не более одного таймера. Каждая mql5-программа и каждый график имеют свою собственную очередь событий, куда складываются все вновь поступающие события. Если в очереди уже есть событие Timer либо это событие находится в состоянии обработки, то новое событие Timer в очередь mql5-программы не ставится.
- www.mql5.com
//+------------------------------------------------------------------+ //| 2.mq4 | //| Copyright 2016, Yuraz | //| yzh@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Yuraz" #property link "yzh@mail.ru" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ datetime ttim=0; int iii=0; int OnInit() { //--- create timer EventSetTimer(1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { ttim = TimeLocal(); if ( iii == 3 ) { Sleep(1000*10); /// делаем зависание на 10 секунд } iii++; printf(" %d %s " , iii , TimeToString( ttim , TIME_DATE|TIME_MINUTES|TIME_SECONDS )); }
провел тест на MT5 1368
2016.07.15 11:55:46.609 1 (EURUSD,H1) 7 2016.07.15 11:55:46
2016.07.15 11:55:45.609 1 (EURUSD,H1) 6 2016.07.15 11:55:45
2016.07.15 11:55:44.671 1 (EURUSD,H1) 5 2016.07.15 11:55:44
2016.07.15 11:55:44.671 1 (EURUSD,H1) 4 2016.07.15 11:55:34
2016.07.15 11:55:33.608 1 (EURUSD,H1) 3 2016.07.15 11:55:33
2016.07.15 11:55:32.608 1 (EURUSD,H1) 2 2016.07.15 11:55:32
2016.07.15 11:55:31.608 1 (EURUSD,H1) 1 2016.07.15 11:55:31
повторил тест на MT4 988
2016.07.15 11:52:27.289 2 EURUSD,H4: 9 2016.07.15 11:52:27
2016.07.15 11:52:26.289 2 EURUSD,H4: 8 2016.07.15 11:52:26
2016.07.15 11:52:25.289 2 EURUSD,H4: 7 2016.07.15 11:52:25
2016.07.15 11:52:24.288 2 EURUSD,H4: 6 2016.07.15 11:52:24
2016.07.15 11:52:23.335 2 EURUSD,H4: 5 2016.07.15 11:52:23
2016.07.15 11:52:23.335 2 EURUSD,H4: 4 2016.07.15 11:52:13
2016.07.15 11:52:12.288 2 EURUSD,H4: 3 2016.07.15 11:52:12
2016.07.15 11:52:11.288 2 EURUSD,H4: 2 2016.07.15 11:52:11
2016.07.15 11:52:10.288 2 EURUSD,H4: 1 2016.07.15 11:52:10
2016.07.15 11:52:09.288 2 EURUSD,H4: initialized
2016.07.15 11:52:07.475 Expert 2 EURUSD,H4: loaded successfully
---
работает как описано
Спасибо. Действительно этот момент не заметил. Но вопрос возник именно по проблеме ниже.
Слава, мы именно с Вами это обсуждали. Для советников именно так, а все же для индикаторов одна очередь на всех?
Никто не читает документацию...
Точно.
https://www.mql5.com/ru/docs/common/sleep
Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет,
кто знает ответ на вопрос: как обстоит дела с очередью в OnTimer ? тоесть допустим есть OnTimer с 1 секундой, соответственно код внутри OnTimer выполняется например 5 секунд
значит ли это, что в очередь выполнения OnTimer выставится 5 приказов на исполнение OnTimer?