Dans mon thread (avec boost :: thread), j'ai besoin de récupérer l'heure actuelle en ms ou moins et de la convertir en ms:
En fait, en lisant ici, j'ai trouvé ceci:
tick = boost::posix_time::second_clock::local_time();
now = boost::posix_time::second_clock::local_time();
Et semble fonctionner, mais après je dois avoir une longue valeur des millisecondes de maintenant ...
Comment puis-je le faire?
Vous pouvez utiliser boost::posix_time::time_duration
pour obtenir la plage de temps. E.g comme ça
boost::posix_time::time_duration diff = tick - now;
diff.total_milliseconds();
Et pour obtenir une résolution plus élevée, vous pouvez modifier l’horloge que vous utilisez. Par exemple à la boost::posix_time::microsec_clock
, bien que cela puisse dépendre du système d’exploitation. Sous Windows, par exemple, boost::posix_time::microsecond_clock
a une résolution en millisecondes et non en microsecondes.
Un exemple qui dépend un peu du matériel.
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;
}
Sur ma machine Win7. La première sortie est 0 ou 1000. Deuxième résolution. Le second est presque toujours 500, à cause de la résolution plus élevée de l'horloge. J'espère que ça aide un peu.
Si vous voulez dire millisecondes depuis Epoch , vous pourriez faire
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();
Cependant, ce que vous recherchez n’est pas particulièrement clair.
Jetez un coup d’œil à l’exemple de la documentation de DateTime à Heure de la date de sursis
// 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
}