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 Discussion :

difftime and tm_argue ?


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable ingénierie des logiciels - Recherche alternance
    Inscrit en
    Novembre 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable ingénierie des logiciels - Recherche alternance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 68
    Points : 92
    Points
    92
    Par défaut difftime and tm_argue ?
    Bonjour,

    Je viens vers vous car j'aimerais faire un difftime de deux dates (elles sont toutes deux de types time_t) seulement il y a quelques détails contraignant ...
    Appelons les date_1 et date_2 pour l'exemple.

    date_1 est dans une fonction dans laquelle elle contient le localtime à un moment précis de l'exécution du jeu.

    quelques secondes/minutes plus tard (d'autres fonctions s'exécute entre-temps).

    date_2 est dans une autre fonction. Dans celle-ci je fais exactement le même principe qu'avec "date_1", elle va contenir le localtime (qui sera donc de valeur différente car quelques secondes se seront passés au minimum).

    Je n'ai aucun problème pour obtenir le localtime de celles-ci, cependant si je veux transmettre "date_1" aux arguments de la fonction de "date_2" puis faire difftime entre eux, là ça bloque. De plus, dans la FAQ dédié à la gestion des dates et heures, le format de printf utilisé pour représenté le resultat d'un difftime est "%g" car il retourne un double, mais n'y aurait t-il pas un moyen simple de l'afficher sous format : " H / Min / Secondes " ? ou il faut faire fonction spéciale pour gérer cela ?

    Je mettrais bien du code, mais à vrai dire c'est assez moche et ayant tourné ça dans tout les sens c'est pire ...

    warning: passing argument 1 of ‘difftime’ makes integer from pointer without a cast ...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ojiuiookojbezib Voir le message
    Bonjour,

    Je viens vers vous car j'aimerais faire un difftime de deux dates (elles sont toutes deux de types time_t) seulement il y a quelques détails contraignant ...
    Appelons les date_1 et date_2 pour l'exemple.

    date_1 est dans une fonction dans laquelle elle contient le localtime à un moment précis de l'exécution du jeu.

    quelques secondes/minutes plus tard (d'autres fonctions s'exécute entre-temps).

    date_2 est dans une autre fonction. Dans celle-ci je fais exactement le même principe qu'avec "date_1", elle va contenir le localtime (qui sera donc de valeur différente car quelques secondes se seront passés au minimum).

    Je n'ai aucun problème pour obtenir le localtime de celles-ci, cependant si je veux transmettre "date_1" aux arguments de la fonction de "date_2" puis faire difftime entre eux, là ça bloque.

    warning: passing argument 1 of ‘difftime’ makes integer from pointer without a cast ...
    Il est où le soucis ?
    L'erreur te dit clairement le soucis : difftime demande un argument de type time_t, et non un pointeur. (cf: http://en.cppreference.com/w/c/chrono/difftime )


    De plus, dans la FAQ dédié à la gestion des dates et heures, le format de printf utilisé pour représenté le resultat d'un difftime est "%g" car il retourne un double, mais n'y aurait t-il pas un moyen simple de l'afficher sous format : " H / Min / Secondes " ? ou il faut faire fonction spéciale pour gérer cela ?

    Je mettrais bien du code, mais à vrai dire c'est assez moche et ayant tourné ça dans tout les sens c'est pire ...
    La fonction asctime() est faite pour ça : http://en.cppreference.com/w/c/chrono/asctime

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable ingénierie des logiciels - Recherche alternance
    Inscrit en
    Novembre 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable ingénierie des logiciels - Recherche alternance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 68
    Points : 92
    Points
    92
    Par défaut
    D'accord j'ai compris l'histoire du message d'erreur, mais c'est horrible je me torture la tête ...
    En gros, ce que je veux faire c'est faire exactement ce que fait la fonction clock(); , je dois calculer le temps d’exécution d'une partie de mon programme(mais je ne peux pas utiliser clock() ) ...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 661
    Points : 10 642
    Points
    10 642
    Par défaut
    Je pense qu'il faut utiliser la méthode getRealTime (voir le code ci-dessous)

    Utilisation:
    À l'initialisation, tu mémorises le temps: start_time = getRealTime( );.
    Et ensuite, si tu veux voir le temps écoulé (code approximatif )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        current_time = getRealTime();
        diff_sec = static_cast<unsigned long>((current_time - start_time));
        diff_milli = static_cast<unsigned long>( std::floor((((current_time - start_time) * 1000.0) - (diff_sec * 1000.0))) );
        if (diff_sec >= 3600) { diff_hour = ((diff_sec - (diff_sec % 3600)) / 3600); diff_sec = (diff_sec % 3600); }
        else { diff_hour = 0; }
        if (diff_sec >= 60)   { diff_min  = ((diff_sec - (diff_sec % 60)) / 60);     diff_sec = (diff_sec % 60); }
        else { diff_min = 0; }
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        double current_time, start_time;
        unsigned long diff_hour, diff_min, diff_sec, diff_milli;

    Fichier getRealTime.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    /*
     * Author:  David Robert Nadeau
     * Site:    http://NadeauSoftware.com/
     * License: Creative Commons Attribution 3.0 Unported License
     *          http://creativecommons.org/licenses/by/3.0/deed.en_US
     */
     
    #if defined(_WIN32)
    #include <Windows.h>
     
    #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__))
    #include <unistd.h>	/* POSIX flags */
    #include <time.h>	/* clock_gettime(), time() */
    #include <sys/time.h>	/* gethrtime(), gettimeofday() */
     
    #if defined(__MACH__) && defined(__APPLE__)
    #include <mach/mach.h>
    #include <mach/mach_time.h>
    #endif
     
    #else
    #error "Unable to define getRealTime( ) for an unknown OS."
    #endif
     
     
    /**
     * Returns the real time, in seconds, or -1.0 if an error occurred.
     *
     * Time is measured since an arbitrary and OS-dependent start time.
     * The returned real time is only useful for computing an elapsed time
     * between two calls to this function.
     */
    double getRealTime()
    {
    #if defined(_WIN32)
    	FILETIME tm;
    	ULONGLONG t;
    #if defined(NTDDI_WIN8) && NTDDI_VERSION >= NTDDI_WIN8
    	/* Windows 8, Windows Server 2012 and later. ---------------- */
    	GetSystemTimePreciseAsFileTime( &tm );
    #else
    	/* Windows 2000 and later. ---------------------------------- */
    	GetSystemTimeAsFileTime( &tm );
    #endif
    	t = ((ULONGLONG)tm.dwHighDateTime << 32) | (ULONGLONG)tm.dwLowDateTime;
    	return (double)t / 10000000.0;
     
    #elif (defined(__hpux) || defined(hpux)) || ((defined(__sun__) || defined(__sun) || defined(sun)) && (defined(__SVR4) || defined(__svr4__)))
    	/* HP-UX, Solaris. ------------------------------------------ */
    	return (double)gethrtime( ) / 1000000000.0;
     
    #elif defined(__MACH__) && defined(__APPLE__)
    	/* OSX. ----------------------------------------------------- */
    	static double timeConvert = 0.0;
    	if ( timeConvert == 0.0 )
    	{
    		mach_timebase_info_data_t timeBase;
    		(void)mach_timebase_info( &timeBase );
    		timeConvert = (double)timeBase.numer / (double)timeBase.denom / 1000000000.0;
    	}
    	return (double)mach_absolute_time( ) * timeConvert;
     
    #elif defined(_POSIX_VERSION)
    	/* POSIX. --------------------------------------------------- */
    #if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0)
    	{
    		struct timespec ts;
    #if defined(CLOCK_MONOTONIC_PRECISE)
    		/* BSD. --------------------------------------------- */
    		const clockid_t id = CLOCK_MONOTONIC_PRECISE;
    #elif defined(CLOCK_MONOTONIC_RAW)
    		/* Linux. ------------------------------------------- */
    		const clockid_t id = CLOCK_MONOTONIC_RAW;
    #elif defined(CLOCK_HIGHRES)
    		/* Solaris. ----------------------------------------- */
    		const clockid_t id = CLOCK_HIGHRES;
    #elif defined(CLOCK_MONOTONIC)
    		/* AIX, BSD, Linux, POSIX, Solaris. ----------------- */
    		const clockid_t id = CLOCK_MONOTONIC;
    #elif defined(CLOCK_REALTIME)
    		/* AIX, BSD, HP-UX, Linux, POSIX. ------------------- */
    		const clockid_t id = CLOCK_REALTIME;
    #else
    		const clockid_t id = (clockid_t)-1;	/* Unknown. */
    #endif /* CLOCK_* */
    		if ( id != (clockid_t)-1 && clock_gettime( id, &ts ) != -1 )
    			return (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000.0;
    		/* Fall thru. */
    	}
    #endif /* _POSIX_TIMERS */
     
    	/* AIX, BSD, Cygwin, HP-UX, Linux, OSX, POSIX, Solaris. ----- */
    	struct timeval tm;
    	gettimeofday( &tm, NULL );
    	return (double)tm.tv_sec + (double)tm.tv_usec / 1000000.0;
    #else
    	return -1.0;		/* Failed. */
    #endif
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 11h49
  3. mise en page (Header and Footer) en XML-XSL.
    Par christine dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/03/2004, 16h31
  4. SQL :select et AND
    Par Shabata dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/05/2003, 13h39
  5. Fip, modbus and co...
    Par xave dans le forum Développement
    Réponses: 2
    Dernier message: 24/05/2002, 13h25

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