2013-07-20 2 views
0

Я использовал GetTickCount() из Windows, но я читал, что он имеет низкую производительность/разрешение, и я хотел бы спросить, что является лучшим способом чтобы получить время.Как получить TIME на C++, желательно на нескольких платформах

Я попытался с помощью <CTIME> библиотеку, но она не идет на миллисекунды или микросекунды, и мне нужно что-то до этой точности.

Спасибо!

+4

Это, вероятно, ответил на уже stackoverflow.com, и этот вопрос, вероятно, принадлежит там. – MichaelHouse

+0

, если вы используете C++ 11, вы можете использовать std :: chrono, иначе я не думаю, что существует высокоточный кросс-платформенный метод. – Ali1S232

+0

Как кроткий совет, «кросс-платформенный» - это всего лишь короткий способ сказать «ограниченный наименьшим общим знаменателем». Особенно в играх вам нужно будет договориться о том, что для каждой платформы '# ifdef' здесь и там. –

ответ

7

При использовании C++ 11, вы можете использовать std::chrono::high_resolution_clock

Precision является деталью реализации, например она должна быть реализована в виде QueryPerformanceCounter на Windows.

#include <chrono> 
#include <iostream> 

int main(int argc, char *argv[]) 
{ 
    auto t1 = std::chrono::high_resolution_clock::now(); 
    auto t2 = std::chrono::high_resolution_clock::now(); 
    std::cout << "It took " << std::chrono::nanoseconds(t2 - t1).count() << " nanoseconds" << std::endl; 

    return 0; 
} 
+1

Обратите внимание, что я сказал _should_ из-за проблемы, изложенной здесь. https://connect.microsoft.com/VisualStudio/feedback/details/719443/ –

1

Если вам нужна кросс-платформенная совместимость, функция clock() от ctime (см. docs), вероятно, будет вашим лучшим выбором. Это в миллисекундах в Visual Studio (хотя это не гарантирует, что он фактически продвигается с шагом в 1 миллисекунду) и, по-видимому, аналогичен другим компиляторам.

Каждая платформа будет иметь свой собственный способ получения времени с более высоким разрешением. В Windows есть timeGetTime() и QueryPerformanceCounter(). Вы можете прочитать о них в Интернете; есть тонны статей о каждом (here's one). Если вас интересуют другие платформы, вам придется работать с Google или проконсультироваться со своими документами для собственных функций синхронизации с высоким разрешением.

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