Таймер - страница 5

 
Yedelkin:
О, свет в конце тоннеля! Вызвать EventSetTimer() внутри самой OnTimer()? Обязательно попробую, как до терминала доберусь. Спасибо за изящное решение!

Я это решение с самого начала видел.

Просто не пробовал как лучше

так EventKillTimer() или так EventSetTimer(0); вырубить таймер.

 
MetaDriver:

  Миллисекунды очень хочется. Присоединяюсь к пожеланиям.  

В эксперте это сейчас опасно. Например синхронная функция MessageBox(), может быстро очередь забить, когда юзер отойдет от терминала.(конечно, можете сказать, что перед такими функциями таймер можно отключать).

Вот если бы сделали обработку прерываний...

Документация по MQL5: Общие функции / MessageBox
Документация по MQL5: Общие функции / MessageBox
  • www.mql5.com
Общие функции / MessageBox - Документация по MQL5
 
stringo:

Сейчас уже невозможно перейти на миллисекунды.

Сколько уже написанных экспертов начнут генерировать в 1000 раз больше событий таймера, чем предполагалось автором?

Не-не.. Так в лоб  менять  не нужно. Нужно просто новую функцию добавить EventSetTimerMS(long ms);

Старую обязательно оставить, именно для совместимости. (Её можно запросто эмулировать  вызовом EventSetTimerMS(1000); )

Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 
Yurich:

В эксперте это сейчас опасно. Например синхронная функция MessageBox(), может быстро очередь забить, когда юзер отойдет от терминала.(конечно, можете сказать, что перед такими функциями таймер можно отключать).

Вот если бы сделали обработку прерываний...

Не надо прерываний.  Впрочем, не представляю что именно вы имеете в виду, может что-то хорошее.. :)

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

 
Yurich:

......... Например синхронная функция MessageBox(), может быстро очередь забить, когда юзер отойдет от терминала.(конечно, можете сказать, что перед такими функциями таймер можно отключать)........

Конечно скажу. ;)
 
С миллисекундами можно было бы попробовать замерить время между тиками, если меньше 500 ms на рынке скоро начнется движуха.
 
stringo:

Сколько уже написанных экспертов начнут генерировать в 1000 раз больше событий таймера, чем предполагалось автором?

Просто мнение: а если существует сама возможность добавить миллисекунды для желающих, и загвоздка только в старых экспертах, то почему бы не ввести новую функцию

   bool EventSetTimer(
                    int  seconds,            // количество секунд для OnTimer
                    bool переключатель=false // переключатель: false - период измеряется в секундах, true - в миллисекундах
                   );

 Сделать всё мультисекундным, а если переключатель==false, умножить однократно значение seconds на 1000  (для старых экспертов, например).

 
Yurich:

В эксперте это сейчас опасно. Например синхронная функция MessageBox(), может быстро очередь забить, когда юзер отойдет от терминала.(конечно, можете сказать, что перед такими функциями таймер можно отключать).

Вот если бы сделали обработку прерываний...

 


OnTimer, OnTick, OnTrade... это и есть прерывания.

 
pusheax:

OnTimer, OnTick, OnTrade... это и есть прерывания.

Прерывание - это когда  исполняется  OnTick, а пришло более важное событие, например OnTimer. Исполнение OnTick приостанавливается,  исполняется код OnTimer, затем снова продолжает выполнятся OnTick.
 
Yurich:
Прерывание - это когда  исполняется  OnTick, а пришло более важное событие, например OnTimer. Исполнение OnTick приостанавливается,  исполняется код OnTimer, затем снова продолжает выполнятся OnTick.
Так небось так и работает.