Domanda

ho intenzione di essere lo sviluppo di un piccolo server dedicato in C / C ++ che richiederà tempi di attività di sempre. Ho cercato in alcune funzioni di tempo, come è richiesto tempi millisecondo per i calcoli. Ho 2 problemi che sto di fronte:

  1. Utilizzo di un numero intero a 32 bit per memorizzare il numero di millisecondi da quando l'operazione è iniziata sarà avvolgere a circa 49 giorni segnano il ripristino a zero. Ho pensato di usare 64 bit interi, usando gettimeofday per recuperare microsecondi, ma questo mi porta alla seconda parte.

  2. Non ci sembra essere tutte le chiamate di sistema standard per ottenere millisecondi trascorsi che sono indipendente dalla piattaforma

Cosa devo fare per risolvere entrambi questi problemi?

È stato utile?

Soluzione

  1. Usa un intero a 64 bit, presumendo che ti dà abbastanza tempo

  2. Hai ragione; non esiste uno standard. Una possibilità sarebbe quella di utilizzare la libreria Boost DateTime , alternativamente trovare un altro o roll your own.

Buona fortuna!

Altri suggerimenti

Come già si è detto, il primo problema che si sta per confrontarsi sta per ottenere un tempo di millisecondo-precisione affidabile.

Devo ammettere che sono un po 'gradualmente dalla domanda però.

Posso capire la necessità di tempi precisi (livello di millisecondo, anche microsecondo), ma di temporizzazione a 50 giorni ad un livello di millisecondo sembra ... strana.

Si dovrebbe forse rivedere il vostro bisogno prima, ma è raro bisogno più di 6 o 7 cifre significative ... e temo che si sta tentando di ottenere un un formato misura tutti oggetto di durata.

Forse che si dovrebbe invece classificare i vostri durate:

  • un paio di minuti al massimo> uso millisecondo di precisione
  • altrimenti> utilizzare secondo precisione (il famoso conteggio dal 1 gennaio 1970)

Perché ... qual è il senso di 1/10 di secondo alla scala di 2 mesi?

Ovvio. Utilizzare interi a 64 bit con il codice di piattaforma specifica per ottenere il numero di millisecondi. Su Unix tra cui OSX, si vuole gettimeofday. Su Windows, buona fortuna per avere una fonte di tempo millisecondo-granularità affidabile; nella libreria Tcl per fare questo è davvero complessa in quanto vi sono alcuni trucchi del male nella zona.

risposta a 1: se il "timing millisecondo", che si sta misurando è sotto di circa 20 giorni, è possibile sottrarre i tempi come valori senza segno e controllare il risultato come valore con segno. Questo dovrebbe dare il giusto risultato con avvolgimento timer (confezione da 0xffffffff a 0x00000000). Se i tempi sono più di 20 giorni, è necessario più bit.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top