Нить демона просыпаться через разные промежутки времени - PullRequest
0 голосов
/ 02 июля 2010

У меня есть поток демона, который просыпается с заданным интервалом для выполнения какой-либо задачи.Теперь мне нужно добавить еще две задачи в поток, и эти задачи имеют свои интервалы.Что-то вроде

  • Через каждые x секунд выполните Task1
  • Через каждые y секунд выполните Task2
  • Через каждые z секунд выполните Task3

Поэтому мне нужно придумать логику сна, чтобы все задачи выполнялись в нужное время.Каков был бы самый оптимальный способ сделать это?Я подумала, что время выполнения каждой задачи - это арифметическая прогрессия, поэтому мне нужно было бы объединить точки доступа, соответствующие каждой задаче, и использовать этот ряд, чтобы выяснить временной интервал, в котором я должен спать, а такжеследующая задача для выполнения.Имеет ли этот подход смысл?

1 Ответ

0 голосов
/ 02 июля 2010

Вы, вероятно, можете сделать что-то вроде этого:

now = time_in_seconds()
time_since_task1 = x - (now % x)
time_since_task2 = y - (now % y)
time_since_task3 = z - (now % z)

shortest_interval = min(min(time_since_task1, time_since_task2), time_since_task3)
sleep(shortest_interval)

Затем вы можете проверить, равно ли "new now" 0 mod x, y, z, и выполнить необходимые задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...