Nella mia discussione (usando boost :: thread) ho bisogno di recuperare l’ora corrente in ms o meno e di convertire in ms:
In realtà, leggendo qui ho trovato questo:
tick = boost::posix_time::second_clock::local_time(); now = boost::posix_time::second_clock::local_time();
E sembra funzionare, ma dopo ho bisogno di avere un valore lungo dei millisecondi dell’ora …
Come posso farlo?
Puoi usare boost::posix_time::time_duration
per ottenere l’intervallo di tempo. Ad esempio in questo modo
boost::posix_time::time_duration diff = tick - now; diff.total_milliseconds();
E per ottenere una risoluzione più alta puoi cambiare l’orologio che stai usando. Ad esempio per boost::posix_time::microsec_clock
, sebbene questo possa dipendere dal SO. Su Windows, ad esempio, boost::posix_time::microsecond_clock
ha una risoluzione in millisecondi, non microsecondi.
Un esempio che dipende un po ‘dall’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; }
Sulla mia macchina win7. La prima uscita è 0 o 1000. Seconda risoluzione. Il secondo è quasi sempre 500, a causa della maggiore risoluzione dell'orologio. Spero che aiuti un po '.
Se intendi millisecondi dall’epoca potresti farlo
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();
Tuttavia, non è particolarmente chiaro cosa stai cercando.
Dai un’occhiata all’esempio nella documentazione di DateTime a 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 }
Prova questo: importa le intestazioni come accennato .. dà solo secondi e millisecondi. Se hai bisogno di spiegare il codice leggi questo link .
#include #include void main() { SYSTEMTIME st; SYSTEMTIME lt; GetSystemTime(&st); // GetLocalTime(<); printf("The system time is: %02d:%03d\n", st.wSecond, st.wMilliseconds); // printf("The local time is: %02d:%03d\n", lt.wSecond, lt.wMilliseconds); }