2017-02-04 1 views
-1

J'essaie simplement d'enregistrer l'heure de mon programme pour terminer (en secondes). J'ai de la difficulté à adopter des solutions que j'ai trouvées en ligne. Je n'imprime pas le temps ou les cycles du processeur, je veux simplement pouvoir marquer un point de départ (heure de l'horloge murale), puis à la fin de mon programme marquer une fin (heure de l'horloge murale), et calculer le delta. NEVERMIND TROUVE LA RÉPONSE QUELQUE AUTRE, MERCI YA'LLComment enregistrer l'heure de la paroi élasperée en C?

+1

Quel système d'exploitation? – clearlight

+0

Aucune réponse n'a à ce jour été acceptée pour vous. Si vous cliquez sur le √ par l'une des réponses (celle qui résout votre problème, le cas échéant), vous obtiendrez des points de réputation et bénéficierez également/créditez la personne qui vous a aidé à résoudre le problème. Voir le [2 Minute Tour] (http://stackoverflow.com/tour) pour avoir une idée du fonctionnement du système Q & A et rep ici. – clearlight

Répondre

0

Appelez simplement time(NULL) pour obtenir l'heure actuelle et utilisez difftime pour calculer le temps entre deux points.

#include <time.h> 
// ... 

time_t start = time(NULL); 
// do stuff here 
time_t end = time(NULL); 
printf("Took %f seconds\n", difftime(end, start)); 
+0

essayé ceci, renvoie beaucoup de zéros – Breeduss

+0

@Breeduss La chose a pris moins d'une seconde? – immibis

0

Jetez un oeil à la fonction:

int clock_gettime(clockid_t clk_id, struct timespec *tp); 

La fonction remplira la structure struct timespec que vous fournissez. Voici sa définition:

struct timespec { 
    time_t tv_sec;  /* secondes */ 
    long  tv_nsec;  /* nanosecondes */ 
}; 

Ainsi, le temps de retour en nanosecondes est: tp->tv_sec * 1e9 + tp->tv_nsec. Vous pouvez trouver tous les possibles clk_id dans le man. Je vous recommande d'utiliser car il vous garantit que l'heure donnée sera toujours continue, même si l'heure du système est modifiée.

+0

Donc j'ai besoin de définir cette structure timespec? – Breeduss

+1

Je préfère souvent obtenir un temps plus précis et arrondir/convertir au besoin. Mais pour les cas de base, le temps ne suffira pas. – clearlight

+0

Cette 'struct timespec' est déjà définie dans' time.h' (n'oubliez pas de l'inclure) – Omar

0

Affiche les horodatages de début et de fin et calcule un delta en secondes.

#include <time.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 

void print_timestamp(char *, time_t); 

int main (int argc, char *argv[]) { 
    time_t start = time(0); 
    print_timestamp("Start: ", start); 

    sleep(2); 

    time_t end = time(0); 
    print_timestamp("End: ", end); 

    double diff = difftime(end, start); 

    printf("Elapsed: %5.2lf seconds\n", diff); 
} 

void 
print_timestamp(char *msg, time_t time) { 
    struct tm *tm; 
    if ((tm = localtime (&time)) == NULL) { 
     printf ("Error extracting time stuff\n"); 
     return; 
    } 
    printf ("%s %04d-%02d-%02d %02d:%02d:%02d\n", 
     msg, 
     1900 + tm->tm_year, 
     tm->tm_mon+1, 
     tm->tm_mday, 
     tm->tm_hour, 
     tm->tm_min, 
     tm->tm_sec); 
} 

Exemple de sortie:

Start: 2017-02-04 15:33:36 
End:  2017-02-04 15:33:38 
Elapsed: 2.00 seconds 
0

Vous pouvez également être en mesure d'utiliser la commande time disponible sur (au moins) les systèmes Unix.

Après la compilation de votre programme, exécutez la commande comme ceci:

# compile your code 
$ gcc foo.c -o foo 
# compute the time 
$ time ./foo