только не надо забывать что цикл + sleep(1) за один час выполнится не 3600 раз, а меньше, так как время цикла будет занимать по времени 1 сек + время выполнения операций в цикле.
Для каких-то задач это не критично, а для например программирования микроконтроллеров (сталкивался с этим) довольно таки критично.
И еще не надо забывать, что если работать с периферией (последовательный порты, usb, запросы на внешние сервера web) время выполнения операций относительно большое.
В данном случае можно было бы исхитриться отслеживать время выполнения операций в цикле (microtime в php например) и из секунды вычитать это время, либо уж привязываться к часам сервера (если честно такое делал только на c# и то в качество эксперимента)