Když jsem dělal plánovač úloh pod Win, taky jsem se dostal k té samé otázce.
Když vlákno uspíš od času 0.000 na 1 sekundu, může se probudit v různém čase, v závislosti na vytížení systému (ostatnímy procesy), nevím zda již dříve (např. 0.950), ale určitě může později (např. 1.235) - poněvadž Multitasking.
Nepotřeboval jsem ale tak velké rozlišení a sekunda mě byla ukradená.
Myslím že pro takto přesné odpočítávání muselo běžet více vláken které byly uspávány na krátičkou dobu a komunikovali mezi sebou (pracovalo se ve vlákně, které se probudilo v nejbližším rozsahu chtěného času).
V tvém případě je problém, že uspávání vlákna na sekundu, nebude v konečném součtu odpovídat.
Doporučil bych dvě možnosti:
1) Hlídat aktuální čas každou sekundu a porovnávat zda čas neuplynul.
2) Udělat dvě vlákna.
Jedno by bylo uspáváno každou sekundu a vypisovalo by STDOUT (s velkou prioritou).
Druhé vlákno by se uspávalo na deset sekund a kontrolovalo by aktuální čas, pak by nějakým způsobem předávalo informaci druhému vláknu o tom že proběhlo deset sekund.
Nejsem odborník, ale snažil jsem se helpnout.