Question

Je suis en train d'écrire un programme en Fortran et je besoin d'un moyen de calcul de la durée de millisecondes jusqu'à programme. J'utilise la fonction « DATE_AND_TIME », ce qui me laisse avec un tableau contenant le temps du système en heures, minutes, secondes et millisecondes.

Je crois que je peux appeler cette fonction au début de mon programme pour stocker l'heure actuelle, puis appelez à nouveau la fonction à la fin de mon programme pour stocker la dernière fois. Mais après cela, comment pourrais-je l'ordinateur la durée? J'ai essayé juste soustraire les valeurs, mais les millisecondes réinitialisée lorsque une seconde passe, tout comme les secondes remis à zéro lorsque la minute qui. Comment serait la meilleure façon d'aborder ce soit?

Voici le programme:

       PROGRAM TEST_TIME_AND_DATE
          INTEGER I
          REAL J
          INTEGER TIME_A(8), TIME_B(8)
          CALL DATE_AND_TIME(VALUES=TIME_A)
          PRINT '(8I5))', TIME_A
          DO I = 0, 400000000
            J = I * I - J
          END DO
          CALL DATE_AND_TIME(VALUES=TIME_B)
          print '(8I5))', TIME_B
      END PROGRAM TEST_TIME_AND_DATE

Et voici le résultat:

2011    6   11 -300    9   14   49  304
2011    6   11 -300    9   14   50  688

Je ne sais pas quoi faire, merci.

Était-ce utile?

La solution

Vous pouvez soustraire les chiffres, puis tout convertir en millisecondes et résumer les ms, sec en ms, min en ms, heures en ms, ...

Dans votre cas, ce serait

0 + 0 + 0 + 0 + 0 + 1*1000 + 384 = 1384 [ms]

Cette approche fonctionne très bien aussi avec trop-pleins depuis un nombre positif dans une colonne de gauche plus outweights nombres négatifs si elles sont toutes converties en la même base. Par exemple. 0:58.000 à des rendements de 1:02.200

1 * 60000 + (-56) * 1000 + 200 = 4200

S'il vous plaît noter que cela fonctionne jusqu'à jours, mais pas avec des mois car ils ne partagent pas une longueur commune.

Autres conseils

Si vous voulez le temps d'horloge écoulé, il serait plus simple d'utiliser la procédure system_clock intrinsèque car elle fournit une seule sortie valeur temporelle. (Il existe des arguments supplémentaires pour fournir des informations sur la procédure, ce qui est pourquoi il est une procédure au lieu d'une fonction.) Voir, par exemple, http://gcc.gnu.org/onlinedocs/gfortran/SYSTEM_005fCLOCK.html . Si vous voulez temps l'utilisation du processeur, puis utilisez cpu_time. Pour les deux, deux appels, au début et à la fin du programme, puis une simple différence. Vous pouvez utiliser l'argument COUNT_RATE pour convertir en nombre entier de temps en secondes.

Vous pourriez calculer le décalage de temps de départ (1 janvier 1970 pour UNIX) en secondes ou en millisecondes. La différence entre ces chiffres est temps écoulé.

(2011 - 1970) * (number of seconds in a year) +
(month of the year - 1) * (number of seconds in a month) +
(day of the month - 1) * (number of seconds in a day) + 
( ... )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top