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

C++Builder Discussion :

Calcul précis de temps sous RAD Studio 10.4


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Calcul précis de temps sous RAD Studio 10.4
    Bonjour à tous

    Je viens fraichement d'installer RAD Studio 10.4.1 et je rencontre quelques soucis de migration de projet.

    Faisant des logiciels qui calculent des temps de réaction, j'ai besoin de calculer le temps entre différents évènements qui surviennent.

    Avant j'effectuais mes calculs de temps comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static __int64 FrequenceHorloge, Debut, Fin;
     
    QueryPerformanceCounter((LARGE_INTEGER*)&Debut);
    QueryPerformanceCounter((LARGE_INTEGER*)&Fin);
     
    QueryPerformanceFrequency((LARGE_INTEGER*)&FrequenceHorloge);
     
    double Temps = (Fin - Debut) / (double)FrequenceHorloge;
    J'ai une erreur sur le type LARGE_INTEGER qui n'existe pas.

    Avez-vous une solution à me proposer car l'utilisation d'un TTimer n'est pas assez précis.

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    LARGE_INTEGER, ça correspond à __int64 ou à long long.

    As-tu essayé de tout simplement supprimer les cast (LARGE_INTEGER*)? Si une erreur se produit à la compilation elle indiquera le type attendu et donc le cast exact à effectuer.

  3. #3
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonsoir
    il vaut mieux utiliser les API Natives de MS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BOOL QueryPerformanceCounter(
      LARGE_INTEGER *lpPerformanceCount
    );
    Attention un LARGE_INTEGER ne correspond pas un type simple mais il s'agit d'une Union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    typedef union _LARGE_INTEGER {
      struct {
        DWORD LowPart;
        LONG  HighPart;
      } DUMMYSTRUCTNAME;
      struct {
        DWORD LowPart;
        LONG  HighPart;
      } u;
      LONGLONG QuadPart;
    } LARGE_INTEGER
    cette déclaration se trouve dans le fichier winnt.h

    le code suivant devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    LARGE_INTEGER Debut;
    LARGE_INTEGER fin;
    if (QueryPerformanceCounter(&Debut)
    {
     
    // ton traitement
     
    }
    Cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Merci à vous pour vos réponses.

    Je viens de me rendre compte que cela ne pourra pas fonctionner pour cette application car je dois également la porter sur Android et que c'est une API Windows.

    Je cherche donc un code pouvant fonctionner sur toutes les plateformes.

    Je me demandais si on ne pouvais pas faire des opérations sur les TDateTime pour obtenir une différence de temps.

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

    Informations professionnelles :
    Activité : ..

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

    En C++, il y a std::chrono (steady_clock (ou high_resolution_clock, si ce n'est pas un alias))
    https://en.cppreference.com/w/cpp/ch...eady_clock/now
    https://en.cppreference.com/w/cpp/ch...tion_clock/now

  6. #6
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    La précision d'un TDateTime est de l'ordre le la milliseconde
    pour l'api MS c'est de l'ordre de la microseconde.
    concernant les API C++ pure cela dépend de la vitesse du processor voir ttps://stackoverflow.com/questions/4...e-is-stdchrono

    donc cela dépend essentiellement de la précision attendue

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par kurul1 Voir le message
    Je cherche donc un code pouvant fonctionner sur toutes les plateformes.
    .
    QueryPerformanceCounter est une API spécifique Windows donc ne fonctionnera pas sur d'autres plateformes.
    Ensuite cette fonction ne fonctionne pas forcément sur tous les CPU.
    Pour faire du code générique pour toutes les plateformes cela me paraît difficile car les fonctions de calcul de temps sont spécifiques à un OS, à part celles standard évidemment

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 277
    Par défaut
    Bonjour,

    Beaucoup de paramètres peuvent intervenir si l'on veut une grande précision.
    Cela dépend notamment de la façon dont sont traités les messages par le système d'exploitation, en fonction de sa charge, dans quel ordre, avec quel niveau de priorité.
    Il est, je le crains, est assez illusoire de l'obtenir de façon purement logiciel avec le même code sur toutes les plateformes.
    Tout dépend bien sur du niveau de précision souhaité.
    C'est un sujet techniquement intéressant.

    Yves

  9. #9
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Dans mon domaine j'ai parfois besoin d'avoir un temps précis et dans ce cas j'ajoute à ma machine une carte spécifique qui assure une mesure exact et précise du temps.
    Évidement cette solution n'est pas applicable à Android

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 277
    Par défaut
    Citation Envoyé par Gouyon Voir le message
    Dans mon domaine j'ai parfois besoin d'avoir un temps précis et dans ce cas j'ajoute à ma machine une carte spécifique qui assure une mesure exact et précise du temps.
    Évidement cette solution n'est pas applicable à Android
    Cela pourrait m'intéresser dans le cadre d'une application scientifique.
    De quel type de carte s'agit-il ?

  11. #11
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 137
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par yvslms Voir le message
    Cela pourrait m'intéresser dans le cadre d'une application scientifique.
    De quel type de carte s'agit-il ?
    Il s'agit de la carte TSYNC en PCIe la documentation est trouvable ici (https://www.acquisys.fr/product/tsync-pmc/)
    Mais il y en a plein d'autre et de type différent il suffit de faire une recherche

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 277
    Par défaut
    Citation Envoyé par Gouyon Voir le message
    Il s'agit de la carte TSYNC en PCIe la documentation est trouvable ici (https://www.acquisys.fr/product/tsync-pmc/)
    Mais il y en a plein d'autre et de type différent il suffit de faire une recherche
    Ok - Merci !!!

    Yves

  13. #13
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    hello
    un vaste choix de cartes et solutions ici:https://www.brandywinecomm.com/46-pr...al-timing-card
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  14. #14
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, je crois que personne n'a parlé de Diagnostics::TStopwatch:
    Utilisez TStopwatch pour obtenir l'accès aux minuteurs à haute résolution qui peuvent être utilisés pour surveiller le temps d'exécution de certaines opérations. TStopwatch utilise la fonctionnalité dépendante du système d'exploitation pour obtenir l'accès aux minuteurs à haute résolution, si disponible. Sinon, les minuteurs habituels sont utilisés.
    Je l'utilise dans un projet C++Builder multi-plateforme et je n'ai pas de problème. Pour l'implémentation Windows c'est QueryPerformanceFrequency qui est utilisé.

Discussions similaires

  1. Calcul scientifique litteral en C++/RAD STUDIO
    Par alex25071 dans le forum C++
    Réponses: 4
    Dernier message: 08/12/2016, 14h48
  2. Réponses: 0
    Dernier message: 09/01/2013, 10h32
  3. [IDE] Problème avec AVIFILEOPEN sous RAD Studio XE3
    Par kurul1 dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/10/2012, 11h26
  4. Réponses: 1
    Dernier message: 06/09/2012, 09h12
  5. temps CPU sous visual studio 2005
    Par pascale_92 dans le forum C++
    Réponses: 1
    Dernier message: 30/10/2007, 16h50

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