Pregunta

Voy a ser el desarrollo de un pequeño servidor dedicado en C / C ++ que requerirá el tiempo de actividad de siempre. He estado buscando en algunas funciones de tiempo ya que se requiere la sincronización de milisegundos para los cálculos. Tengo 2 problemas que estoy frente a:

  1. El uso de un número entero de 32 bits para almacenar el número de milisegundos desde que comenzó la operación envolverá alrededor en alrededor de los 49 días marcan una puesta a cero. He pensado en utilizar 64 bits enteros, usando gettimeofday para recuperar microsegundos, pero esto me lleva a la segunda parte.

  2. No parece que haya ninguna llamada de sistema estándar para obtener milisegundos transcurridos que sean independiente de la plataforma

¿Qué debo hacer para resolver estos dos problemas?

¿Fue útil?

Solución

  1. Utilice un número entero de 64 bits, suponiendo que le da tiempo suficiente

  2. Usted está correcto; no existe un estándar. Una posibilidad sería el uso de la biblioteca del Boost DateTime , alternativamente encontrar otro o hágalo usted mismo.

Buena suerte!

Otros consejos

Como ya se ha dicho, el primer problema que se va a enfrentar va a obtener un tiempo de confianza milisegundos precisa.

Tengo que admitir que estoy un poco por etapas por la pregunta, sin embargo.

Me puede entender la necesidad de la sincronización exacta (nivel de milisegundos, incluso microsegundos) pero el tiempo a 50 días a un nivel de milisegundos parece ... extraño.

tal vez debería revisar su necesidad primera, pero es raro necesitar más de 6 o 7 dígitos significativos ... y me temo que usted está tratando de obtener una talla volverlos a poner todos los objetos duración.

Tal vez que en su lugar debe clasificar sus duraciones:

  • un par de minutos a lo sumo> precisión de milisegundos uso
  • de otro modo> utilizar segunda precisión (el famoso conteo desde ene 1 ª 1970)

Porque ... ¿cuál es el sentido de 1/10 de segundo en la escala de 2 meses?

obvias. Utilice enteros de 64 bits con el código de plataforma específica para obtener el número de milisegundos. En Unix incluyendo OS X, desea gettimeofday. En Windows, buena suerte conseguir una fuente de tiempo de milisegundos granularidad fiable; la href="http://tcl.cvs.sourceforge.net/viewvc/tcl/tcl/win/tclWinTime.c?revision=1.36&view=markup" rel="nofollow código en la biblioteca Tcl a hacer esto es muy complejo, ya que hay algunos aspectos críticos del mal en la zona.

Respuesta a 1: Si el "tiempo de milisegundos" que se está midiendo es menor de alrededor de 20 días, puede restar las veces como valores sin signo y comprobar el resultado como valor con signo. Esto debería dar el resultado correcto con envolver temporizadores (envoltorio de 0xffffffff a 0x00000000). Si el tiempo es más de 20 días, se necesita más bits.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top