Ожидание чего-либо — обязательная часть любой автоматизации. EyeAuras постоянно с этим работает: задержки между нажатиями клавиш, поддержание стабильного FPS захвата, пользовательские таймауты в скриптах. Стандартные инструменты операционной системы и базовые методы вроде Thread.Sleep, Task.Delay и некоторых других недостаточно точны, поэтому в какой-то момент пришлось реализовать комбинацию подходов, которая обеспечивала лучшую точность.
Этот механизм позволял делать ожидания с точностью до долей миллисекунды и использовался последние 5–6 месяцев. К сожалению, такая точность имеет свою цену, и для большинства операций она попросту не нужна.
Поэтому в ближайшие несколько месяцев мы будем тестировать 3-ю версию Sleep(), которая должна стать компромиссом между точностью и затратами по производительности. В среднем ожидаемая точность — до 0.5 - 5ms.
Это значит, что если вы задаёте ожидание 1ms, фактическая задержка будет примерно в диапазоне 1 - 1.5ms, чего более чем достаточно для большинства сценариев. Для более длинных таймаутов, например 100ms, фактическое время может быть в диапазоне 100 - 105ms.
Взамен снижения точности вы получите заметно лучшую производительность. Посмотрим, как это покажет себя в реальных сценариях.
В рамках разработки этой функции я также добавил интеграционный слой, который позволит использовать тот механизм Sleep(), который лучше подходит именно под ваш сценарий. Подробнее об этом расскажу позже.


ExecuteScriptNode свойство IsMaximized теперь сохраняется в самом узлеMaximized) или нетScriptVariable добавлен Listen() — теперь его можно использовать вместо WatchCurrentValue