Живое окно: resume, wait, halt
Отпустить цель, ждать остановки с таймаутом, остановить с подтверждением.
с 0.3.0с 0.5.0
Методы
Изменения API 3 (0.5.0)
resume(sync=False), wait и halt — только async def; таймаут обязателен. В def resume() блокирует до остановки.
Правильно
halt — в finally: таймаут wait цель не останавливает. Поколение (generation) связывает остановку с окном.
@case("HW_WINDOW")
async def window(t):
await t.reach("idle")
started = t.resume(sync=False)
try:
waited = await t.wait(timeout=0.2)
t.check("no stop yet", waited["outcome"], "timeout")
finally:
stopped = await t.halt(timeout=2)
t.check("same window", stopped["generation"], started["generation"])
t.check("memory readable", t.read("counter"), 3)Не рекомендуется
Пока цель работает, доступ к памяти отклоняется (not_stopped). Без finally таймаут оставит цель работающей.
await t.reach("idle")
t.resume(sync=False)
value = t.read("counter") # refused: not_stopped
await t.wait(timeout=5) # no finally/halt: a timeout leaves the target runningФрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.
Фрагменты для тела сценария; символы прошивки условные.