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

 
TheXpert:

Использование менеджера таймеров. Хотел статью тиснуть, потом как-то отошло в сторону. Хотя на статью может и не потянет.

В конкретное время не получится из-за однопоточности кода и очереди событий, но со средней погрешностью меньше секунды (максимальная ограничена максимальным временем исполнения события кодом).

Тем более таймер он только один.

Надо?

Да, погрешность практически незаметная. Может, в Code Base сразу выложите? На форуме - затеряется, а там - ещё кому понадобится.
 
Yedelkin:
Да, погрешность практически незаметная. Может, в Code Base сразу выложите? На форуме - затеряется, а там - ещё кому понадобится.

Не до конца готово, сейчас для 5ки занят своим File Unlimited. Скоро закончу.

Фишка не в том -- понадобится или нет. Это единственный нормальный и правильный способ работать с несколькими таймерами.

 
TheXpert:

Не до конца готово, сейчас для 5ки занят своим File Unlimited. Скоро закончу.

Ничего страшного, подождём. Обращусь-ка пока в СД, может сделают возможность запуска первого события Timer с определённой отсрочкой.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
Yedelkin:

Есть ли какой-нибудь способ заставить советник генерировать события Timer в определённое время? Например, в начале последней минуты часа или дня. 

Какие проблемы? Запускайте обычный таймер и анализирйте время. Не подходит время - сразу уходите из OnTimer
 
TheXpert:

Опять же, это отличная замена функции Sleep в индюках, и опять же секунда это многовато.

Тему открыл для обсуждения. Что думаете?

Есть один нюанс. Таймер в индикаторе не работает, если он не присоединен к графику. Поэтому даже секундный таймер часто бесполезен в индикаторах.

Здесь есть решение для контроля событий с частотой меньше секунды. Возможно в связке с GetTickCount() можно сделать таймер. 

 
stringo:
Какие проблемы? Запускайте обычный таймер и анализирйте время. Не подходит время - сразу уходите из OnTimer

И зачем мне бомбить очередь событий ежесекундными Timer, да плюс ещё тратить время на ежесекундные проверки в OnTimer(), если, по сути, требуется запускать OnTimer() с периодичностью раз в сутки (в час, и т.д.), но в определённое время?

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

   bool EventSetTimer(
                   int seconds,      // количество секунд для OnTimer
                   int задержка=0     // количество секунд задержки запуска первого события Timer 
                   );

 Что и предложил в СД.

Дополнение: значение параметра задержка можно легко и однократно вычислить в OnInit().

 
Yedelkin:

И зачем...

Ну вообще-то по сути я это и предлагал. Только еще обернутое в удобную упаковку.

Раз в секунду это страшный мизер, особенно если пропускать ненужные события.

 
Нужно только задержку в секундах переделать в миллисекунды.
bool EventSetTimer(1000);// количество миллисекунд для 1 секунды задержки для OnTimer

а это

int задержка=0     // количество секунд задержки запуска первого события Timer 

вообще не делать, так как это просто хрень.

 
pusheax:

 

int задержка=0     // количество секунд задержки запуска первого события Timer 

вообще не делать, так как это просто хрень.

Спрошу, как специалиста по хрени. Какова идея этой задержки (int задержка=0), и для каких целей она (задержка) предлагалась? Как Вы это поняли?

И вторым вопросом хочу уточнить, в чём смысл указания "количества миллисекунд для 1 секунды задержки для OnTimer"? Какую цель пытаетесь достичь? Задерживать, к примеру, каждую секунду в OnTimer на три миллисекунды?

 
TheXpert:

Ну вообще-то по сути я это и предлагал. Только еще обернутое в удобную упаковку.

Раз в секунду это страшный мизер, особенно если пропускать ненужные события.

Как вы и поняли, в данном случае у меня девиз: "Долой любые мизеры, если можно обойтись и без них". Стоит только на уровне терминала разрешить задержку генерирования первого события Timer на выбранное пользователем время. При этом значимость Вашего кода никак не умоляю, тем более, что его попросту не видел.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
Причина обращения: