Obtenez l'heure actuelle en millisecondes en utilisant C++ et Boost

Dans mon thread (en utilisant 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 j'ai besoin d'avoir une longue valeur des millisecondes Du maintenant...

Comment puis-je le faire?

50
demandé sur Peter Mortensen 2011-07-18 18:20:20

4 réponses

Vous pouvez utiliser boost::posix_time::time_duration pour obtenir la plage de temps. Par exemple 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 au 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 de miliseconde, pas de microseconde.

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 la plus haute résolution de l'horloge. J'espère que vous aider un peu.

67
répondu mkaes 2013-11-07 16:38:53

Si vous voulez dire millisecondes depuis l'époque, 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 n'est pas particulièrement clair ce que vous recherchez.

Jetez un oeil à l'exemple dans la documentation pour DateTime à Boost Date Time

13
répondu Brian O'Kennedy 2011-07-18 14:39:33
// 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
}
6
répondu Macbeth's Enigma 2013-07-12 20:46:09

Essayez ceci: importez les en-têtes comme mentionné.. donne des secondes et des millisecondes seulement. Si vous avez besoin d'expliquer le code Lire ce lien .

#include <windows.h>

#include <stdio.h>

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);

}
-8
répondu user1476945 2012-06-29 23:19:04