Как обновлять графические объекты по таймеру?

 

Хочу сделать отображение времени на графике с секундами, которые будут меняться раз в секунду.

В функции OnTime() меняю текст на в объекте и вызываю функцию ChartRedraw(). Но оно вроде как срабатывало по тику так и продолжает :(

Таймер инициализировал EventSetTimer(1).
 

vipermagi:
...........

Таймер инициализировал EventSetTimer(1).

В OnInit() я надеюсь?

 
Renat Akhtyamov:

В OnInit() я надеюсь?

Да.

Я, короче, разобрался в чём причина была. Оказывается своё время сервер присылает только во время тика, который может и пол минуты не приходить. И функция TimeCurrent() берёт как раз это серверное время. А вот функция TimeLocal() нормально раз в секунду время меняет. Я думал это оно не перерисовывает, а оно просто одно и то же время раз в секунду выставляло.

 
vipermagi:

Хочу сделать отображение времени на графике с секундами, которые будут меняться раз в секунду.

В функции OnTime() меняю текст на в объекте и вызываю функцию ChartRedraw(). Но оно вроде как срабатывало по тику так и продолжает :(

Таймер инициализировал EventSetTimer(1).

кстати, про таймер :-)

таймер не всегда инициализируется удачно
типичный use-case:

bool hasTimer;
datetime lastTimer;
int OnInit() {
   hasTimer=EventSetTimer(RESOLUTION);
   lastTimer=TimeLocal();
}
void OnDeinit() {
   if (hasTimer) EventKillTimer();
}
void OnTimer() {
   lastTimer=TimeLocal();
}
void OnTick() {
   if (!hasTimer) {
        hasTimer=EventSetTimer(RESOLUTION);
        if (TimeLocal()>lastTimer+RESULTION) OnTimer()
   }
}
/// по аналогии с OnTick - OnCalculate, OnChartEvent
Причина обращения: