Получить текущее время в миллисекундах, используя C ++ и Boost - PullRequest
50 голосов
/ 18 июля 2011

В моем потоке (используя boost :: thread) мне нужно получить текущее время в мс или меньше и преобразовать в мс:

На самом деле, читая здесь, я нашел это:

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

И, кажется, работает, но после того, как мне нужно иметь длинное значение миллисекунды сейчас ...

Как я могу это сделать?

Ответы [ 4 ]

67 голосов
/ 18 июля 2011

Вы можете использовать boost::posix_time::time_duration, чтобы получить диапазон времени.Например, вот так:

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

И чтобы получить более высокое разрешение, вы можете изменить часы, которые используете.Например, до boost::posix_time::microsec_clock, хотя это может зависеть от ОС.Например, в Windows boost::posix_time::microsecond_clock имеет разрешение в миллисекундах, а не микросекундах.

Пример, который немного зависит от аппаратного обеспечения.

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

На моей машине win7.Первый выход - либо 0, либо 1000. Второе разрешение.Второй почти всегда 500, из-за более высокого разрешения часов.Я надеюсь, что это поможет немного.

13 голосов
/ 18 июля 2011

Если вы имеете в виду миллисекунды , начиная с эпохи , вы можете сделать

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

Однако, не совсем понятно, что вы ищете.пример в документации для DateTime в Boost Date Time

8 голосов
/ 13 июля 2013
// 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
}
0 голосов
/ 29 июня 2012

Попробуйте это: импортировать заголовки, как уже упоминалось .. дает только секунды и миллисекунды.Если вам нужно объяснить код, прочитайте эту ссылку .

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

}
...