Мой телефон мертв, и у меня нет будильника. Вот мое решение (на Bash), чтобы я проснулся завтра утром

while [ 1 ]; do
  TIME=$(date +'%H'):$(date +'%M')
  echo $TIME
  if [ $TIME == "06:15" ];then
    osascript -e "set Volume 3"
    open /Path/To/MyFavouriteSong.mp3
    break
  fi
  sleep 58
done

Этот код работает хорошо (на Mac OSX 10.12.2 и до тех пор, пока мой компьютер не засыпает), но выглядит несколько глупо.

Мне непонятно, как процессор измеряет определенное время. Я не знаю, тестирует ли приложение будильника каждые 58 секунд (или другое время ближе, но все же короче, чем одна минута), если уже пора подать сигнал или есть какой-то механизм для ЦП, чтобы послать сигнал для программы в определенное время.

1 ответ1

4

Здесь https://unix.stackexchange.com/questions/64191/how-do-the-internals-of-the-cron-daemon-work объясняется (на примере cron), как вы можете реализовать программу, что делает что-то каждые X секунд / минут. Это сделано аналогично вашему подходу.

Если ваш вопрос был в том, как процессор знает текущее время: обычно на материнской плате установлены аппаратные часы, работающие так же, как обычные кварцевые наручные часы, которые могут связываться с процессором. Процессор может спрашивать эти часы каждую мс или сколько угодно, какое точное время. Это причина, по которой на материнской плате обычно находится батарейка типа «таблетка»: чтобы аппаратные часы работали.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .