Как работать в режиме OnTimer() ? - страница 2

 

Отличное, разностороннее и полное решение проблемы! Спасибо всем!

 
Evgeniy Serov:

При EventSetTimer(60) функция OnTimer()  будет запускаться один раз в минуту


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

#define MILLISEC_TIMER_INTERVAL         1000   

int OnInit()
{

   if(!EventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL))
   {
      Print("Не могу запустить таймер");
      return INIT_FAILED;
   }

}

***

 
Sergey Kolemanov:

) Спасибо, не знал. И в справке об этом ни слова...


Это в МТ4 таймер не работает в тестере, в МТ5 работает 

 
Alexey Volchanskiy:

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

***


Прекрасно!

 
Taras Slobodyanik:

для тестера, в онтик, добавляем:

и всё работает)


И то, как оно работает является ни разу не OnTime(), а вовсе совершенно OnTick().

То есть срабатывает не по таймеру, а по тикам.

Годится только для проверки общей функциональности обработчика OnTimer() в ограниченном числе случаев.

 
Yury Kirillov:

И то, как оно работает является ни разу не OnTime(), а вовсе совершенно OnTick().

То есть срабатывает не по таймеру, а по тикам.

Годится только для проверки общей функциональности обработчика OnTimer() в ограниченном числе случаев.


конечно, если нужен конкретный период времени, то нужно добавить проверку времени (текущее время минус предыдущее)...

И, как раз годится для всего что нужно. (возможно у меня все случаи ограниченные)

 
Taras Slobodyanik:

конечно, если нужен конкретный период времени, то нужно добавить проверку времени (текущее время минус предыдущее)...

И, как раз годится для всего что нужно. (возможно у меня все случаи ограниченные)


У меня для МТ4 вот так сделана имитация таймера в тестере. Не идеал, но для примерного тестирования потянет

void OnTick()
{
    if(IsRunOnTester())
    {
        static datetime dt1 = 0, dt2 = 0;
        static bool tfirst = true;
        if(tfirst)
        {
            tfirst = false;
            dt1 = dt2 = TimeCurrent();
            return;
        }
    
        dt2 = TimeCurrent();
        for(datetime TimeTesterCurrent = dt1+1; TimeTesterCurrent <= dt2; TimeTesterCurrent++)
        {
            TimeToStruct(TimeTesterCurrent, TimeCurrStruct);
            OnTimer();
        }    
        dt1 = dt2;
    }
}

***

Причина обращения: