2009-02-11 22 views
45

Trong Windows, có một số chức năng hữu ích như QueryPerformanceCounter từ mmsystem.h để tạo bộ hẹn giờ có độ phân giải cao. Có điều gì đó tương tự cho Linux không?Hẹn giờ có độ phân giải cao với C++ và Linux?

+0

http://stackoverflow.com/a/5524138/183120 (Cross-nền tảng C++ 11 tiêu chuẩn độ phân giải cao timer) – legends2k

Trả lời

31

Đã là asked before here - nhưng về cơ bản, có chức năng tăng thời gian bạn có thể sử dụng hoặc chức năng clockIX clock_gettime() có thể phục vụ về cơ bản cùng một mục đích.

+0

Bạn chưa' Tôi biết rằng Boost cung cấp chức năng hẹn giờ. Cảm ơn bạn :) – okoman

+1

Hoặc sử dụng [HighResTimer] (http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/classACE__High__Res__Timer.html) từ [ACE] (http: //www.cs.wustl. edu/~ schmidt/ACE.html) thư viện. – lothar

+3

@lothar: +1 cho con trỏ tới thư viện ACE, cảm ơn. Liên kết bạn đưa ra đã cũ, đây là một liên kết mới: http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html –

29

Đối với Linux (và BSD) bạn muốn sử dụng 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 
} 

Xem: This answer để biết thêm thông tin

+6

clock_gettime (CLOCK_MONOTONIC, &ts); cũng hoạt động trong Linux. – Maister

+7

Tất nhiên , bạn cần phải nhận thức được sự khác biệt giữa 'CLOCK_MONOTONIC' và' CLOCK_REALTIME' - trước đây đã thiết lập điểm zero của nó thành một cái gì đó tùy ý khi khởi động hệ thống, và như vậy chỉ hữu ích cho việc so sánh tương đối giữa hai phép đo 'CLOCK_MONOTONIC' (nhưng không bị ảnh hưởng bởi điều chỉnh xung quanh) – bdonlan

1

Đối với tiền của tôi, không có dễ dàng sử dụng cross-platform timer hơn lớp QTime Qt của.

2

Với C++ 11, hãy sử dụng std::chrono::high_resolution_clock.

Ví dụ:

#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; 
} 

Output:

Delta t2-t1: 131 nanoseconds 
Các vấn đề liên quan