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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Yedelkin
4193
Yedelkin  
TheXpert:

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

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

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

Надо?

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

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

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

Yedelkin
4193
Yedelkin  
TheXpert:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TheXpert
17878
TheXpert  
Yedelkin:

И зачем...

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

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

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

а это

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

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


Yedelkin
4193
Yedelkin  
pusheax:

 

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

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

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

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

Yedelkin
4193
Yedelkin  
TheXpert:

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

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

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