W Windowsie jest kilka przydatnych funkcji, takich jak QueryPerformanceCounter
z mmsystem.h
, aby utworzyć zegar o wysokiej rozdzielczości. Czy jest coś podobnego w Linuksie?Zegar wysokiej rozdzielczości z C++ i Linux?
Odpowiedz
To była asked before here - ale w zasadzie jest dostępna funkcja doładowania ptime, lub funkcja POSIX clock_gettime(), która może służyć w zasadzie do tego samego celu.
wstałem t wiedzą, że Boost zapewnia funkcjonalność timera. Dziękuję :) – okoman
Lub użyj [HighResTimer] (http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/classACE__High__Res__Timer.html) z [ACE] (http: //www.cs.wustl. edu/~ schmidt/ACE.html). – lothar
@lothar: +1 dla wskaźnika do biblioteki ACE, dziękuję. Link, który podałeś, był nieaktualny, oto nowy: http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html –
mam nic prócz tego linku: http://www.mjmwired.net/kernel/Documentation/rtc.txt
jestem całkiem pewny RTC jest to, czego szukasz chociaż.
EDIT
Inne odpowiedzi wydają się bardziej mobilny niż moje.
Dla systemu Linux (i BSD), który chcesz użyć clock_gettime().
#include <sys/time.h>
int main()
{
timespec ts;
// clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD
clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux
}
Patrz: This answer więcej informacji
clock_gettime (CLOCK_MONOTONIC, &ts); działa również w Linuksie – Maister
Oczywiście , musisz zdawać sobie sprawę z różnicy między 'CLOCK_MONOTONIC' i' CLOCK_REALTIME' - pierwsza z nich ma ustawiony punkt zerowy na coś arbitralnego przy starcie systemu, i jako taka jest przydatna tylko do względnych porównań między dwoma pomiarami "CLOCK_MONOTONIC" (ale nie ma wpływu na regulacje ścienne) – bdonlan
Oto link opisujący jak zrobić wysokiej rozdzielczości taktowania w systemach Linux i Windows ... i nie, nie używać RTSC.
http://tdistler.com/2010/06/27/high-performance-timing-on-linux-windows
Za moje pieniądze, nie ma łatwiejszy w obsłudze zegar wieloplatformowy niż QTime klasy Qt.
W C++ 11 użyj std::chrono::high_resolution_clock
.
przykład:
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;
int main()
{
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << "Delta t2-t1: "
<< std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
<< " nanoseconds" << std::endl;
}
wyjściowa:
Delta t2-t1: 131 nanoseconds
http://stackoverflow.com/a/5524138/183120 (Cross platforma C++ 11 standardowych wysokiej rozdzielczości zegar) – legends2k