| import time | |
| def precise_sleep(dt: float, slack_time: float=0.001, time_func=time.monotonic): | |
| """ | |
| Use hybrid of time.sleep and spinning to minimize jitter. | |
| Sleep dt - slack_time seconds first, then spin for the rest. | |
| """ | |
| t_start = time_func() | |
| if dt > slack_time: | |
| time.sleep(dt - slack_time) | |
| t_end = t_start + dt | |
| while time_func() < t_end: | |
| pass | |
| return | |
| def precise_wait(t_end: float, slack_time: float=0.001, time_func=time.monotonic): | |
| t_start = time_func() | |
| t_wait = t_end - t_start | |
| if t_wait > 0: | |
| t_sleep = t_wait - slack_time | |
| if t_sleep > 0: | |
| time.sleep(t_sleep) | |
| while time_func() < t_end: | |
| pass | |
| return | |