Sur les systèmes Unix, libfaketime est la solution standard de facto pour ce problème dans les logiciels. Il effectue une sorte d'opération d'homme au milieu entre votre application et la bibliothèque de temps du système. Les demandes sont transmises au système, mais les réponses sont modifiées au besoin. Il modifie également les résultats des stat()
appels, donc les temps de modification des fichiers & c. sont également modifiés.
Les paramètres sont définis avec des variables d'environnement, vous devrez donc peut-être en savoir plus si vous n'êtes pas déjà familier avec leur fonctionnement.
libfaketime prend en charge les décalages relatifs et absolus, les temps d'arrêt et d'exécution et l'accélération ou le ralentissement. Mais je ne sais pas courir à reculons.
Notez que la version actuelle prétend que les secondes sont la résolution de temps la plus élevée qui soit et transmet les sous-secondes des réponses à l'application sans modification. Ainsi, si vous ralentissez l'horloge à mi-vitesse, un programme sensible aux sous-secondes effectuant des appels de temps très rapides connaîtra la seconde entière deux fois de suite plutôt qu'une seule fois deux fois plus longue. Si l'horloge est arrêtée, cela signifie que l'application voit une heure aléatoire dans la seconde sélectionnée.
Malheureusement, Github est en panne aujourd'hui, donc les documents ne sont pas disponibles en ce moment, mais cela sera probablement corrigé bientôt.
Éditer:
Avec Github sauvegardé, je l'ai essayé et j'ai trouvé le code pour le changement de vitesse suffisamment général pour qu'il fonctionne bien avec des valeurs négatives ou tout autre élément accepté par atof()
.
Cependant, un problème différent est devenu apparent: pour le changement de vitesse, une origine temporelle est nécessaire en plus de l'heure actuelle réelle et du décalage horaire souhaité. Cette origine est définie indépendamment pour les sous-processus, de sorte que (lors de l'exécution à reculons à la vitesse nominale) lorsque le processus parent s'est rétracté d'une minute, un sous-processus nouvellement généré verra l'heure actuelle deux minutes plus tard que le processus parent.