2016-02-18 25 views
5

Trong ví dụ tại http://en.cppreference.com/w/cpp/chrono giá trị giây thu được trong một double. Đây là hành vi tôi muốn. Tuy nhiên, điều này dường như dựa vào giả định ngầm định rằng trừ điểm thời gian cho một giá trị đại diện cho giây. Tôi không thể tìm thấy bất cứ điều gì giải thích lý do tại sao một thời gian mang lại số giây trôi nổi khi không có đơn vị thời gian nào được chỉ định thực sự. Nếu không sử dụng auto, ai đó có thể hiển thị cách thu thập đơn vị thời gian một cách rõ ràng, chẳng hạn như giây trong loại điểm nổi hoặc trỏ tôi đến tài liệu hoặc giải thích về lý do tại sao chuyển đổi nói trên đại diện cho giây?Nhận giây chrono trong phao

Việc quy đổi trong câu hỏi là chủ yếu:

std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now(); 
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now(); 
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit? 
double secondsInDouble = elapsed_seconds.count(); 

Xem bài viết sau đây cho ví dụ về việc chuyển đổi.

How to get duration, as int milli's and float seconds from <chrono>?

C++ chrono - get duration as float or long long

getting chrono time in specific way

Chrono Timer Not Converting Seconds Properly

Trả lời

5

Theo này: http://en.cppreference.com/w/cpp/chrono/duration tỷ lệ mặc định cho tham số thứ hai là mẫu 1:1 nghĩa giây.

Các giá trị khác là tỷ lệ tương ứng với tỷ lệ đó. Ví dụ tỷ lệ cho std::chrono::milliseconds1:1000http://en.cppreference.com/w/cpp/numeric/ratio/ratio

Vì vậy, tuyên bố này:

std::chrono::duration<double> elapsed_seconds = end-start; 

tương đương với:

std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start; 

nào được định nghĩa là giây mà từ đó tất cả các tỷ lệ khác có nguồn gốc.

Bất kỳ đơn vị nào end - start được xác định trong chuyển đổi thành std::ratio<1> như trong giây.

Nếu bạn muốn thời gian trong mili giây bạn có thể làm:

std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start; 

end - start nên được chuyển đổi theo tỷ lệ mới.

+0

Tôi thấy phần tôi đã bỏ lỡ ở đầu tham chiếu: 'dấu chấm là một hằng số hợp lý thời gian biên dịch biểu diễn số giây từ một lần đánh dấu đến tiếp theo. 'Vì vậy, với tỷ lệ mặc định là 1: 1, khoảng thời gian luôn đại diện cho một giây. Cảm ơn vì đã mang đến sự chú ý của tôi. – taz

+2

'std :: ratio <1, 1000>' có thể được thay thế bằng 'std :: milli'. –

Các vấn đề liên quan