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

Delphi Discussion :

Problème de précision sur date de création des fichiers


Sujet :

Delphi

  1. #1
    Rédacteur

    Profil pro
    Inscrit en
    Avril 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 182
    Points : 1 853
    Points
    1 853
    Par défaut Problème de précision sur date de création des fichiers
    J'essaie de trouver le fichier le plus ancien dans un dossier (sous NTFS). Pour faire des tests je crée 100 fichiers comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for index_file := 1 to 100 do
      begin
        filename := buildFileName(index_file);
     
        AssignFile(f, Fpath + filename);
        rewrite(f);
        Writeln(f, 'bla bla bla');
        CloseFile(f);
        //Sleep(1) ;
      end;
    puis je parcours ces fichiers avec FindFirst/FindNext(search_rec) et je compare les dates de création search_rec.FindData.ftCreationTime avec la fonction CompareFileTime.

    J'ai la surprise de constater que plusieurs de ces dates sont identiques. De même quand j'insère un Sleep de quelques millisecondes. A partir de 10 millisecondes, les dates de création sont toutes différentes.

    Quelqu'un aurait-il une explication ?
    Bruno

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 586
    Points : 25 254
    Points
    25 254
    Par défaut
    Le temps mesuré par ftCreationTime est précis à 0.1µs ... mais windows lui même n'est pas si précis

    Avec QueryPerformanceFrequency tu obtiendras le nombre de "tick" par seconde, ... pour ma machine c'est 3 000 170 000, et l'on constate que c'est proche des 3Ghz la fréquence du proc, tient, un truc qu'il faudrait que je vérifie un jour, si cela à un lien ...

    Mais, pour ses mesures, Windows est basé sur l'horloge du BIOS, ainsi Now() en boucle ne donne pas mieux que ... ou encore basé sur l'horloge, il y a GetTickCount (célèbre en Win98 car son implémentation faisait planter l'OS au bout de 49,7 jours ou 2^32 ms) ... et souvent à moins de 16ms, c'est peu précis, il suffit de faire un QueryPerformance autour du sleep(1), il y aura des irrégularités flagrante, qui iront de (1100µs à 2500µs) ... mais, c'est encore plus flagrant en appelant la méthode Now ... qui ne te donnera un temps différent que tous les 15 - 16 ms, tout simplement parce c'est dans le système, celui ci ne va consulter l'heure que sur une fréquence donnée ainsi les temps ne peuvent pas être en dessous de cette fréquence ...

    ainsi tu verras que la précison est souvent rarement exact sous la 20aine de milli-seconde pour tout ce qui concerne les informations pour l'utilisateur via l'Horloge, ... si le système ne faisait que ça de consulter l'heure du BIOS, il serait lent, car il doit en même temps, gérer les interruptions liés au clavier, à la souris, ... il y a énormément de traitement que l'on ne voit pas lié au matériel ...

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Avril 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 182
    Points : 1 853
    Points
    1 853
    Par défaut
    Merci pour les précisions, ca incite en effet à se méfier des valeurs de quelques millisecondes. Tes commentaires sur le matériel m'ont aussi conduit a répeter le test sur différents PCs, et en effet la vitesse d'accès en écriture sur le disque dur semble jouer. Sur mon portable le problème apparaît tout le temps, mais c'est beaucoup moins flagrant sur un serveur.... Ca veut peut être dire que les opérations de créations des fichiers sont groupées dans le cas d'un disque lent, ce qui expliquerait que certaines dates soient identiques?

    Bruno

Discussions similaires

  1. [LV 7.1] Probléme de précision sur des chiffres
    Par Meuphis dans le forum LabVIEW
    Réponses: 4
    Dernier message: 09/06/2009, 14h41
  2. Réponses: 2
    Dernier message: 10/10/2008, 19h40
  3. Réponses: 2
    Dernier message: 28/11/2007, 21h02
  4. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  5. Problème de lien sur date entre Access et MySQL-4.1
    Par michou42 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/04/2005, 23h31

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