2016-09-22 2 views
-1

en cherchant de l'aide pour obtenir les temps réels, utilisateur, sys des fonctions dans mon programme C. Par exemple combien de temps il a fallu pour lire dans un fichier. J'ai regardé le #include et en utilisant la fonction time() avec le drapeau -p, mais je suis en train de supprimer l'exécution de ceci. Je suppose que ma question est de savoir si je:Obtenir l'heure réelle, utilisateur, sys des fonctions dans un programme

time_t total_time; 
time_t start, end; 

start = time(-p, &start); 

<some code> 

end = time(-p, &end); 

printf("real = %e, user = %S, sys = %S\n", ???????????); 

Je comprends les différences entre les trois fois, ne savent pas la bonne exécution d'obtenir les résultats.

+0

Votre question n'a aucun rapport avec [tag: real-time]. Ne marquez pas de manière indiscriminée et n'abusez pas de la terminologie standard. – EJP

Répondre

0

Vérifiez la valeur de retour de time():

La valeur retournée représente généralement le nombre de secondes écoulées depuis 00:00 heures, 1 jan 1970 UTC (à savoir, l'horodatage unix en cours). Bien que les bibliothèques puissent utiliser une représentation différente du temps: Les programmes portables ne doivent pas utiliser directement la valeur renvoyée par cette fonction, mais s'appuient toujours sur les appels aux autres éléments de la bibliothèque standard pour les traduire en types portables (tels que localtime, gmtime ou difftime) .

Pour afficher le temps réel, lisez ceci answer.

Pour l'utilisateur et le système, lire: How to measure user/system cpu time for a piece of program?

+0

Ive lire ces messages et beaucoup plus, y compris la page man linux pour time(). Je comprends ce qu'il fait et ce que chaque valeur représente.J'ai un problème pour l'implémenter. Je ne peux pas utiliser clock() car je dois exécuter ce code sur une machine vraiment ancienne et elle n'aime pas la fonction clock() func. Merci pour votre contribution même si c'est très apprécié. – LD50

+0

Vous êtes les bienvenus @ LD50, j'ai upvoted votre question, dans l'espoir d'attirer l'attention! Attendez de voir si une autre réponse est postée. Si non, alors envisager d'accepter ma réponse. – gsamaras

0

Le temps écoulé réel peut être déterminé en appelant time() avant et après, et en soustrayant les résultats. Si vous voulez être portable, vous devez utiliser la fonction difftime pour effectuer la soustraction, car la valeur de retour de time() n'est pas garantie d'être un nombre. Toutefois, si vous utilisez un système compatible POSIX, la valeur de retour de time() correspondra au nombre de secondes écoulées depuis l'époque. Vous pouvez donc simplement les soustraire pour obtenir les secondes écoulées.

Si vous souhaitez obtenir un résultat de résolution supérieure, vous pouvez utiliser gettimeofday(), ce qui renvoie une structure timeval contenant une résolution d'une milliseconde. La manière la plus portable d'accéder à l'utilisateur est d'appeler la fonction de bibliothèque clock() C, cependant vous avez noté dans vos commentaires à @gsamaras que votre système n'a pas cette fonction.

Selon le système avec lequel vous travaillez, vous pouvez appeler les fonctions système times() ou getrusage(). getrusage() serait plus facile à utiliser, car il renvoie les valeurs timeval structs, qui contiennent des secondes et des millisecondes. times() renvoie les ticks de l'horloge que vous auriez à convertir si vous vouliez des unités de temps réelles.

Si votre programme est threadé, et que vous utilisez Linux, getrusage() offre un avantage supplémentaire: vous pouvez obtenir la consommation de ressources pour le thread actuel. Quelle que soit la fonction choisie, le processus consiste à obtenir la lecture initiale, la lecture finale et à soustraire les deux résultats pour voir le temps consommé par votre fonction.