Obtenga la hora actual en milisegundos usando C ++ y Boost

En mi hilo (usando boost :: thread) necesito recuperar la hora actual en ms o menos y convertir a ms:

En realidad, leyendo aquí he encontrado esto:

tick = boost::posix_time::second_clock::local_time(); now = boost::posix_time::second_clock::local_time(); 

Y parece funcionar, pero después de que necesito tener un valor largo de los milisegundos del ahora …

¿Cómo puedo hacerlo?

Puede usar boost::posix_time::time_duration para obtener el rango de tiempo. Por ejemplo, esto

 boost::posix_time::time_duration diff = tick - now; diff.total_milliseconds(); 

Y para obtener una resolución más alta, puede cambiar el reloj que está usando. Por ejemplo para boost::posix_time::microsec_clock , aunque esto puede depender del sistema operativo. En Windows, por ejemplo, boost::posix_time::microsecond_clock tiene una resolución de milisegundos, no de microsegundos.

Un ejemplo que depende un poco del hardware.

 int main(int argc, char* argv[]) { boost::posix_time::ptime t1 = boost::posix_time::second_clock::local_time(); boost::this_thread::sleep(boost::posix_time::millisec(500)); boost::posix_time::ptime t2 = boost::posix_time::second_clock::local_time(); boost::posix_time::time_duration diff = t2 - t1; std::cout << diff.total_milliseconds() << std::endl; boost::posix_time::ptime mst1 = boost::posix_time::microsec_clock::local_time(); boost::this_thread::sleep(boost::posix_time::millisec(500)); boost::posix_time::ptime mst2 = boost::posix_time::microsec_clock::local_time(); boost::posix_time::time_duration msdiff = mst2 - mst1; std::cout << msdiff.total_milliseconds() << std::endl; return 0; } 

En mi máquina win7. La primera salida es 0 o 1000. Segunda resolución. El segundo es casi siempre 500, debido a la mayor resolución del reloj. Espero que ayudes un poco.

Si te refieres a milisegundos desde la época que podrías hacer

 ptime time_t_epoch(date(1970,1,1)); ptime now = microsec_clock::local_time(); time_duration diff = now - time_t_epoch; x = diff.total_milliseconds(); 

Sin embargo, no está particularmente claro lo que estás buscando.

Eche un vistazo al ejemplo en la documentación de DateTime en Boost Date Time

 // Get current date/time in milliseconds. #include "boost/date_time/posix_time/posix_time.hpp" namespace pt = boost::posix_time; int main() { pt::ptime current_date_microseconds = pt::microsec_clock::local_time(); long milliseconds = current_date_microseconds.time_of_day().total_milliseconds(); pt::time_duration current_time_milliseconds = pt::milliseconds(milliseconds); pt::ptime current_date_milliseconds(current_date_microseconds.date(), current_time_milliseconds); std::cout << "Microseconds: " << current_date_microseconds << " Milliseconds: " << current_date_milliseconds << std::endl; // Microseconds: 2013-Jul-12 13:37:51.699548 Milliseconds: 2013-Jul-12 13:37:51.699000 } 

Pruebe esto: importar encabezados como se menciona … da segundos y milisegundos solamente. Si necesita explicar el código, lea este enlace .

 #include  #include  void main() { SYSTEMTIME st; SYSTEMTIME lt; GetSystemTime(&st); // GetLocalTime(&lt); printf("The system time is: %02d:%03d\n", st.wSecond, st.wMilliseconds); // printf("The local time is: %02d:%03d\n", lt.wSecond, lt.wMilliseconds); }