Прошу помощи в решении задачи!
Мне нужно сделать цикл, который будет бесконечно повторятся, но у него есть особенность - повторение происходит через заданный интервал времени, после окончания вычислений в цикле.
Сами вычисления в цикле могут быть долгими, до нескольких минут.
После завершения расчётов прибавляйте к текущему времени столько секунд сколько нужно ожидать.
static datetime time_wait; while(true) { if(TimeLocal()>=time_wait) { .... Выполнили расчёты и устанавливаем новое время, повтор через 10 секунд time_wait=TimeLocal()+10; } }
Посмотрите функцию
Забыл сказать, что это мне нужно для скрипта.
После завершения расчётов прибавляйте к текущему времени столько секунд сколько нужно ожидать.
Спасибо, попробую.
Так как мне это нужно для скрипта, то хорошо бы организовать возможность выхода из этого цикла, как это лучше можно сделать? Т.е. нужно, видимо отловить какое то событие... штатными средствами можно отловить событие при нажатии сочетания клавиш, или что ещё можно сделать в рамках скрипта?
Есть еще функция Sleep.
Процессор она не грузит. Если просто написать While( true ), то скрипт займет целиком ядро процессора. Если там поставить хотя бы Sleep( 0 ), то нагрузка резко снижается.
Есть еще функция Sleep.
Процессор она не грузит. Если просто написать While( true ), то скрипт займет целиком ядро процессора. Если там поставить хотя бы Sleep( 0 ), то нагрузка резко снижается.
Излагайте свою мысль дальше... пока не понял.
while ( true ) {}
Ядро загружено на 100%
while ( true ) { Sleep( 0 ); }
Ядро загружено на ~0%
Соответственно:
datetime nextCheckTime = 0; while ( true ) { if ( TimeLocal() > nextCheckTime ) { ... долгие вычисления nextCheckTime = TimeLocal() + period; } else Sleep( 0 ); }
Это будет запускаться с фиксированными паузами между запусками.
Если нужно с фиксированным периодом между запусками долгие вычисления перенесите после nextCheckTime = ...
Пока идет пауза - нагрузка на процессор отсутствует.
Но если паузы большие, то можно писать Sleep( 10000 ) и т.п.
Ядро загружено на 100%
Ядро загружено на ~0%
Соответственно:
Это будет запускаться с фиксированными паузами между запусками.
Если нужно с фиксированным периодом между запусками долгие вычисления перенесите после nextCheckTime = ...
Пока идет пауза - нагрузка на процессор отсутствует.
Но если паузы большие, то можно писать Sleep( 10000 ) и т.п.
Спасибо, вроде как получилось! Правда выходит из цикла не сразу при удалении скрипта подтупляет.
while ( ! IsStopped() ) { ...
Остальное то же самое
Остальное то же самое
Спасибо! Действительно, тестовое удаление скрипта прошло значительно быстрей.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу помощи в решении задачи!
Мне нужно сделать цикл, который будет бесконечно повторятся, но у него есть особенность - повторение происходит через заданный интервал времени, после окончания вычислений в цикле.
Сами вычисления в цикле могут быть долгими, до нескольких минут.