Это зависит от ваших ограничений, но простое решение - всегда делить оставшееся время на 2, а затем спать в течение этого времени.Он имеет логарифмическую сложность, и это нормально.
Часто ОС гарантирует гранулярность только 10 мс, поэтому прекращайте спать, когда время падает ниже 20 мс.