IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Mise à l'heure windows, décalage 1 minute regulièrement


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut Mise à l'heure windows, décalage 1 minute regulièrement
    Bonjour à tous,

    J'ai développé mon application pour recevoir le message WM_TIMECHANGE car j'avais un doute sur les changements d'heure intempestifs de Windows.
    Ce message est envoyé à chaque fois que l'heure Windows est mise à jour.
    Je constate que je reçois ce message régulièrement, à une fréquence qui semble dépendre des PC mais toujours avec le même décalage: 1 minutes.
    Mon explication serait que Windows maintient un horloge logicielle qui se décalerait au fil du temps et se remettrait à jour lorsque le décalage atteint une minute, enfin c'est ce que j'en conclus.
    Notez que ce PC n'est pas connecté à Internet et n'est pas sur un réseau.

    Dans le gestionnaire d'évènement, je retrouve bien cette information dans l'item System (source=Kernel-General) avec le message suivant:

    L'heure du système est passée de 2023-02-08T21:38:00,887702300Z à 2023-02-08T21:39:01.50000000Z.
    Raison de la modification: System time synchronized with the hardware clock.
    Procedure: "" (PID4)


    Mon application tourne 24/24h pendant des mois et j'observe ce phénomène qui parfois arrive une fois tout les 2/3 mois, et parfois toutes les semaines.

    Ca me pose un gros problème car je stocke des données au fil de l'eau que j'horo date.

    J'ai chercher plusieurs solutions mais en vain:
    - lire directement l'heure dans le composant RTC (Real time clock: composant sur la carte mere)
    - ou empêcher windows de relire l'heure du RTC
    - ou obliger Windows de se synchroniser avec le RTC à des moments précis uniquement (donc sur demande)

    Vos suggestions SVP ?

    merci

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    salut

    le seul reel moyen c'est de se synchroniser avec l'orloge parlante ou un serveur equivalent

    recherche les serveurs ntp proche de ta region
    et configure le script rn consequance

    voici un petit script que j'utilise
    net stop w32time

    w32tm /config /update /manualpeerlist:"ntp1.MonServeur,..." /syncfromflags:MANUAL,DOMHIER
    w32tm /config /update
    w32tm /config /reliable:yes

    net start w32time
    w32tm /resync /force
    w32tm /query /status

    Pause

  3. #3
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Merci pour cette tentative de réponse, mais comme indiqué, le PC est en stand alone, il n'est pas connecté à Internet ni à un réseau local.
    Je ne souhaite pas que l'horloge change inopinément car le PC est utilisé pour enregistrer des informations en continu, il n'est pas admissible qu'on ait un décalage temporelle ponctuel. En revanche, si l'horloge se décale doucement dans le temps, ce n'est pas grave.
    Donc l'idéal serait soit d'inhiber complétement la mise à l'heure de l'horloge par l'OS, soit lire directemnet l'horloge matériel (RTC) mais ce dernier cas poserait un problème de droit administrateurs...

  4. #4
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Pourquoi ne pas utiliser le simple compteur GetTickCount ou GetTickCount64 pour calculer votre horodatage, d’après le help ces fonctions ne sont pas affectées par les ajustements du temps.

    https://learn.microsoft.com/en-us/wi...i-gettickcount

  5. #5
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Oui j'avais déjà pensé à utiliser GetTickcount mais il est remis à zero trop fréquemment.
    Il y aurait aussi éventuellement gettickcount64 mais ces fonctions ont une résolution de 16ms et j'aimerais une meilleurs résolution.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Tu as QueryPerformanceCounter, plus précis, remis à 0 de temps à autre.
    Si ton appli tourne pendant des mois et que tes événements à enregistrer chronologiquement sont beaucoup plus fréquents que la RAZ, tu peux stocker un Timestamp à son ouverture (heure Windows), puis appeler le QPC comme début d'intervalle.
    A chaque événement à horodater, tu appeleras le QPC à stocker comme nouveau début et feras la différence à ajouter (avec la bonne conversion) à ton Timestamp. Si la différence est négative, il faudra ajouter le Max(QPC).

    A tester en termes de précision au final, mais devrait garantir la chronologie.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 707
    Par défaut
    Salut,

    Citation Envoyé par franckcl Voir le message
    Ca me pose un gros problème car je stocke des données au fil de l'eau que j'horo date.
    Citation Envoyé par franckcl Voir le message
    Il est ainsi possible d'acceder au temps écoulé en ms grace à la propriété TStopWatch.ElapsedMilliseconds
    Comment fais-tu pour résoudre un problème d'horodatage avec un chronomètre ? L'heure exacte n'a-t-elle pas d'importance ? Quand est-il de l'heure d'été, de l'heure d'hiver ?

  8. #8
    Membre expérimenté Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Salut,
    Comment fais-tu pour résoudre un problème d'horodatage avec un chronomètre ? L'heure exacte n'a-t-elle pas d'importance ? Quand est-il de l'heure d'été, de l'heure d'hiver ?
    Oui, ce n'est as réalisable en l'état.
    Le chronomètre m'est utile pour d'autres taches mais pas pour l'horodatage.
    Je ne me vois pas prendre la date au moment du lancement de mon soft et ajouter ensuite le chronométre...ce n'est pas jouable, je vais me retrouver avec des écarts entre l'heure indiquée par Windows et l'heure utilisée pour l'horodatage.
    Donc je vais tenter de bloquer la mise à l'heure de Windows depuis l'horloge matériel.
    J'ai regardé l'état des services sur un des PC et le service w32time est désactivé, donc ce n'est pas lui qui semble gérer cela.

    Voilà où j'en suis, je ne sais pas quel service gère la synchronisation avec l'horloge matérielle ...

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    As tu regardé si RealTimeIsUniversal avait un impact ?
    Ainsi que SetSystemTimeAdjustment
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 707
    Par défaut
    Voir éventuellement dans le planificateur des tâches le dossier \Microsoft\Windows\Time Synchronization

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par franckcl Voir le message
    je vais me retrouver avec des écarts entre l'heure indiquée par Windows et l'heure utilisée pour l'horodatage.
    Est-ce grave ? Si tu enregistre un fichier, tu peux toujours modifier son horodatage de création...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. pb avec les mises à jour de windows xp
    Par balqis dans le forum Windows XP
    Réponses: 3
    Dernier message: 18/09/2006, 16h51
  2. Réponses: 4
    Dernier message: 24/07/2006, 02h03
  3. Mises à jour de Windows XP Pro
    Par Olivier Regnier dans le forum Windows XP
    Réponses: 2
    Dernier message: 13/07/2006, 12h08
  4. Réponses: 23
    Dernier message: 07/07/2006, 11h09
  5. mise à niveau vers Windows XP
    Par Ordonnateur dans le forum Windows XP
    Réponses: 10
    Dernier message: 25/08/2005, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo