Я ищу кросс-платформенные часы с высоким разрешением, высокой точностью и относительно низкой производительностью (в порядке важности).Часы с высоким разрешением в VS2013
Я пробовал:
//using namespace std::chrono;
//typedef std::chrono::high_resolution_clock Clock;
using namespace boost::chrono;
typedef boost::chrono::high_resolution_clock Clock;
auto now = Clock::now().time_since_epoch();
std::size_t secs = duration_cast<seconds>(now).count();
std::size_t nanos = duration_cast<nanoseconds>(now).count() % 1000000000;
std::time_t tp = (std::time_t) secs;
std::string mode;
char timestamp[] = "yyyymmdd HH:MM:SS";
char format[] = "%Y%m%d %H:%M:%S";
strftime(timestamp, 80, format, std::localtime(&tp)); // Takes 12 microseconds
std::string output = timestamp + "." + std::to_string(nanos);
После некоторых исследований и испытаний: Оригинального станд :: хроно :: high_resolution_clock является ЬурейиМ к system_clock и имеет точность примерно 1 миллисекунду. Функция boost :: chrono :: high_resolution_clock использует Query_Performance_Counter для Windows и имеет высокое разрешение и точность. К сожалению, Clock :: now() возвращает время с момента загрузки и теперь(). Time_since_epoch() не возвращает время эпохи (также возвращает время с момента загрузки).
Не против использования защитных устройств для различных решений на разных платформах (требуется VS2013 и Linux). Скорее всего, сохранить сейчас и выполнить обработку в отдельном/низкоприоритетном потоке.
Существует ли межплатформенный высокоточный высокопроизводительный таймер с высокой разрешающей способностью?
Is boost :: chrono :: high_resolution_clock :: now(). Time_since_epoch() работает по назначению? Это не дает времени с последней эпохи. Это дает только время с момента последней загрузки. Есть ли способ преобразовать это сейчас() в секунды с эпохи.
Добавлен вопрос. Глядя на форсированный документ, кажется, что эпоха может быть произвольно определена. Но тогда нет независимого от часов способа преобразования времени_since_epoch в эпоху unix эпохи (обычно называемой эпохой 1970). – user2411693
Помогает ли этот вопрос и ответы? [C++ кросс-платформенный таймер с высоким разрешением] (https://stackoverflow.com/questions/1487695/c-cross-platform-high-resolution-timer)? – Neitsa
Этот пост решает проблему получения времени между двумя точками (таймеры). Мне удобно вычитать любые часы, чтобы найти прошедшее время. То, что я хочу, - это возможность создавать временные метки, которые являются yyyymmdd HH: MM: SS.NNNNNNNNN, где часть наносекундов внутренне согласована (для которой требуется постоянный_clock/QPC), а время - правильное системное время. – user2411693