С++ 11 получить текущее время с точностью до микросекунды

Я знаю, как получить текущее время с точностью до микросекунды в Linux, используя gettimeofday(). Однако он не переносим и не работает на MinGW. Как получить ту же функциональность с С++ 11?

#include <sys/time.h>
#include <cstdio>

int main(){
    timeval curTime;
    gettimeofday(&curTime, NULL);

    unsigned long micro = curTime.tv_usec;
    printf("micro is: %lu\n", micro);

    char buffer [30];
    //localtime is not thread safe
    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localtime((const time_t*)&curTime.tv_sec));
    printf("buffer is: %s\n", buffer);

    char currentTime2[30] = "";
    sprintf(currentTime2, "%s.%06Lu", buffer, micro); 
    printf("currenttime is: %s\n", currentTime2);
}

это нормально в Linux и не печатает буфер под MinGW. Что здесь не так?


person atsCoder    schedule 26.03.2015    source источник
comment
Конкретно какая-то ОС?   -  person Martin James    schedule 26.03.2015
comment
auto now = std::chrono::system_clock::now(); Вы можете извлекать в любом разрешении.   -  person Red Alert    schedule 26.03.2015
comment
@red, запрашивающий это в ns, не дает вам разрешения ns.   -  person Yakk - Adam Nevraumont    schedule 26.03.2015
comment
@Yakk Это правда, хотя он, по крайней мере, даст вам это в формате ns. Проблема с использованием часов HR заключается в том, что они не гарантированно привязаны к системным часам (они выберут steady_clock, если они имеют более высокое разрешение), что делает их ненадежными для получения времени суток.   -  person Red Alert    schedule 26.03.2015
comment
Требование времени с точностью до миллисекунды, как правило, является тревожным сигналом. Обычно единственное, что нужно с такой точностью, это временной интервал. Абсолютное время имеет значение только при сравнении этого времени со временем других часов, что подразумевает сетевую связь. Сети обычно имеют задержки в миллисекундах.   -  person MSalters    schedule 26.03.2015


Ответы (2)


std::chrono::high_resolution_clock. Это портативно, но может отстой. Продолжительность приведена к высокой точности: вы даже можете спросить, насколько точна она, но это может быть ненадежным.

boost имеет переносимые библиотеки часов и времени, которые могут быть более надежными.

person Yakk - Adam Nevraumont    schedule 26.03.2015

Вы пробовали std::chrono::high_resolution_clock ? Эта статья может оказаться полезным справочником по внутренней работе Хронобиблиотека С++ 11.

person wblades    schedule 26.03.2015
comment
У меня есть эта книга, но я все еще не могу найти пример, чтобы найти время. high_resolution_clock не имеет to_time_t() - person atsCoder; 30.03.2015