Что самый лучший, самый точный таймер в C++?
какой самый лучший, самый точный таймер в C++?
4 ответов
ответ на это зависит от платформы. Операционная система отвечает за отслеживание времени, и, следовательно, сам язык C++ не предоставляет языковых конструкций или встроенных функций для этого.
однако вот некоторые ресурсы для зависящих от платформы таймеров:
-
Windows API -
SetTimer
: http://msdn.microsoft.com/en-us/library/ms644906 (v=против 85).aspx -
в Unix -
setitimer
: http://linux.die.net/man/2/setitimer
кросс-платформенное решение может быть boost::asio:: deadline_timer.
В C++11 вы можете переносно добраться до таймера с самым высоким разрешением с:
#include <iostream>
#include <chrono>
#include "chrono_io"
int main()
{
typedef std::chrono::high_resolution_clock Clock;
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << t2-t1 << '\n';
}
пример:
74 nanoseconds
"chrono_io" является расширением, чтобы облегчить проблемы ввода / вывода с этими новыми типами и свободно доступен здесь.
существует также реализация <chrono>
доступно в boost (все еще может быть на наконечнике багажника, не уверен, что он был выпущен).
под windows это будет QueryPerformanceCounter
, хотя, видя, что вы не указали никаких условий, можно иметь внешний таймер с ультравысоким разрешением, который имеет интерфейс c++ для драйвера
стандарт C++ не говорит много о времени. Есть несколько функций, унаследованных от C через .
функции clock
- это единственный способ, чтобы получить суб-секунды точность, но точность может быть как низко как одна секунда (это определяется макрос CLOCKS_PER_SEC
). Кроме того, он измеряет не реальное время вообще, а процессорное время.
функции time
измеряет Реальное время, но (обычно) только до ближайшей секунды.
для измерения реального времени с точностью до секунды вам нужна нестандартная библиотека.