2013-02-09 3 views
0

Я пробовал поиск, не найдя ответа на этот вопрос, который соответствует мне требованиям или объясняет это достаточно ясно.Существует ли стандартный эквивалент библиотеки timeGetTime()?

Я ищу функцию или способ реализовать функцию, которая может извлекать количество тиков или миллисекунд так же, как функция timeGetTime() в окнах.

Я ищу решение, которое использует только стандартные C++, дополнительные библиотеки или спецификацию платформы (например, timeGetTime() для Windows или эквивалент Linux, многоплатформенное решение).

Я стараюсь, чтобы моя платформа кода была независимой на нижнем уровне библиотеки, и я просто хочу знать, может ли кто-нибудь сказать мне/указать мне на способ соединить что-то вместе с timeGetTime().

Благодаря

Обновление: Я не обязательно ищу для обеспечения высокой производительности и точности, нужно только точность миллисекунды, чтобы увидеть, сколько времени прошло с тех пор я в последний раз проверил.

+0

Почему 'timeGetTime()'? Он не имеет очень хорошего разрешения, и через некоторое время он переполняется. Почему бы не использовать 'QueryPerformanceCounter' или даже' GetTickCount64'? (Linux-эквивалент 'QueryPerformanceCounter' является' clock_gettime', между прочим.) – Cameron

+0

Я не слишком беспокоюсь, что timeGetTime - это просто функция, с которой я знаком, что делает то, что мне нужно с точки зрения окон. Я просто ищу что-то не специфичное для платформы. –

+0

Функция 'timeGetTime' возвращает время **, прошедшее с момента запуска Windows **. Вы хотите именно это или просто хотите измерить временные интервалы? – jweyrich

ответ

1

Вы можете использовать вездесущую библиотеку <chrono>, добавленную в C++ 11.

Оно имеет различные типы часов в зависимости от того, что вы хотите, с system_clock быть единственным, который может быть использован с time_t и high_resolution_clock быть один с наименьшим клеща возможно.

Зубчатые вещи относительно просто с ним, например:

#include <iostream> 
#include <chrono> 

int main() { 
    auto now = std::chrono::high_resolution_clock::now(); 
    //do stuff here 
    auto then = std::chrono::high_resolution_clock::now(); 
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(then-now).count(); 
} 
+0

это похоже на решение, которое я мог бы использовать, однако я получаю исключение для компиляции, пытаясь использовать ваш пример с участием duration_cast. Сообщение: никакой экземпляр шаблона функции «std :: chrono :: duration_cast» не соответствует списку аргументов –

+0

@AdamGoss Я не могу воспроизвести его, какой компилятор вы используете? – Rapptz

+0

Ничего, я изменил его, чтобы теперь использовать часть then-now, поскольку мне интересно только получить значение времени в точке. Вызов time_since_epoch избавляется от ошибки компиляции. Я предполагаю, что это то, чем я занимаюсь. –

3

C++ 11 добавлен заголовок <chrono>, который обеспечивает стандартизованный способ считывания системного времени с более высоким разрешением, чем старый localtime. Однако точность зависит от платформы.

Класс steady_clock, вероятно, будет наиболее полезен для вас.

Смежные вопросы