Проигрывание звука не мешает выполнению кода, т. к. функция PlaySound является асинхронной. Таким образом, никакой проблемы нет.
Проигрывание звука не мешает выполнению кода, т. к. функция PlaySound является асинхронной. Таким образом, никакой проблемы нет.
Так как мне проиграть 5-минутную мелодию полностью?
а то только что посмотрел, на каждом тике прерывается проигрывание мелодии и начинается заново.Так как мне проиграть 5-минутную мелодию полностью?
а то только что посмотрел, на каждом тике прерывается проигрывание мелодии и начинается заново.Значит, алгоритм неправильно составлен. Наверное, в OnTick() при достижении времени Вы просто запускаете проигрывание? Конечно же, на каждом тике будет проигрываться заново.
При первом PlaySound нужно установить флаг начала проигрывания и проверять его в момент следующего входа в OnTick(). Если флаг установлен, то не запускать проигрывание заново.
P. S. При этом нужно следить, чтобы в терминале не запустился какой-либо другой звук, потому что он как раз и прервет проигрывание текущего звука.
P. P. S. Вообще очень странно использовать терминал в качестве будильника. Для этого лучше применить сторонний софт, там и проблем никаких не будет.
При первом PlaySound нужно установить флаг начала проигрывания и проверять его в момент следующего входа в OnTick(). Если флаг установлен, то не запускать проигрывание заново.
блин, с вашими асинхронными функциями...) я думал, что все функции пока не отработают, то советник в ожидание нового тика не перейдет.
bool flag=true; void OnTick() { if (Minute()>=0 && flag==true) PlaySound("Dan"); flag=false; }
спасибо за совет.
P. P. S. Вообще очень странно использовать терминал в качестве будильника. Для этого лучше применить сторонний софт, там и проблем никаких не будет.
блин, с вашими асинхронными функциями...) я думал, что все функции пока не отработают, то советник в ожидание нового тика не перейдет.
Немного не так. Потому как флаг будет сброшен, даже если нужное время не наступило. Именно для этого кода правильнее так:
bool flag=true; void OnTick() { if (Minute()>=0 && flag) { PlaySound("Dan"); flag=false; } }
в mql-программиста должен быть и будильник в терминале и плеер)
Просто будете бороться со сторонними звуками, которых может быть много в терминале. За 5 минут такое событие вполне может произойти.
Но даже для этого случая есть решение - запустить PlaySound в отдельном потоке. Но это уже при помощи WinAPI. За то в терминале )))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Чтобы на каждом новом тике она не прерывалась и не начиналась заново?