Search code examples
c++boosttimetimestampmilliseconds

Get current time in milliseconds using C++ and Boost


In my thread (using boost::thread) I need to retrieve the current time in ms or less and to convert into ms:

Actually, reading here I've found this:

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

And seems to work, but after I need to have a long value of the milliseconds of the now...

How can I do it?


Solution

  • You can use boost::posix_time::time_duration to get the time range. E.g like this

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

    And to get a higher resolution you can change the clock you are using. For example to the boost::posix_time::microsec_clock, though this can be OS dependent. On Windows, for example, boost::posix_time::microsecond_clock has milisecond resolution, not microsecond.

    An example which is a little dependent on the 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;
    }
    

    On my win7 machine. The first out is either 0 or 1000. Second resolution. The second one is nearly always 500, because of the higher resolution of the clock. I hope that help a little.