Domanda

Sto scrivendo un programma in Fortran e ho bisogno di un modo di calcolare la durata del programma di basso per millisecondi. Sono stato con la funzione "DATE_AND_TIME", che mi lascia con una matrice contenente il tempo del sistema in ore, minuti, secondi e millesimi di secondo.

Credo che posso chiamare questa funzione all'inizio del mio programma per memorizzare l'ora corrente, quindi chiamare di nuovo la funzione alla fine del mio programma per memorizzare l'ora più recente. Ma dopo che, come faccio di computer la durata? Ho provato solo sottraendo i valori, ma i millisecondi resettato quando si passa al secondo, proprio come i secondi ripristinati quando sia trascorso un minuto. Come sarebbe modo migliore per affrontare questo?

Ecco il programma:

       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

Ed ecco il risultato:

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

Non sono sicuro di cosa fare qui, grazie.

È stato utile?

Soluzione

È possibile sottrarre i numeri, poi convertire tutto in millisecondi e riassumere le ms, sec in ms, min in ms, ore in ms, ...

Nel tuo caso questo sarebbe

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

Questo approccio funziona bene anche con overflow poiché un numero positivo in una sinistra più colonna outweights numeri negativi se sono tutti convertiti stessa base. Per esempio. 0:58.000 ai rendimenti 1:02.200

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

Si noti che questo funziona fino a giorni, ma non con mesi dal momento che non condividono una lunghezza comune.

Altri suggerimenti

Se si desidera che il tempo trascorso orologio, sarebbe più semplice utilizzare la procedura intrinseca system_clock in quanto fornisce una singola uscita time value. (Ci sono argomenti aggiuntivi per fornire informazioni sulla procedura, è per questo che è una procedura invece di una funzione.) Si veda, ad esempio, http://gcc.gnu.org/onlinedocs/gfortran/SYSTEM_005fCLOCK.html . Se si vuole il tempo l'utilizzo della CPU, quindi utilizzare cpu_time. Per entrambi, due chiamate, all'inizio e alla fine del programma, quindi una semplice differenza. È possibile utilizzare l'argomento COUNT_RATE da convertire in numero intero di tempo in secondi.

Si potrebbe calcolare l'offset da qualche tempo di inizio (1 gennaio 1970 per UNIX) in secondi o millisecondi. La differenza di quei numeri è il vostro tempo trascorso.

(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) + 
( ... )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top