2012-02-08 26 views
9

Tôi đang sử dụng boost::posix_time::ptime để đo thời gian chạy mô phỏng của mình và cho một số thứ khác.nhận được tăng :: posix_time :: time_duration trong giây

assuimg

boost::posix_time::ptime start, stop; 
boost::posix_time::time_duration diff; 
start = boost::posix_time::microsec_clock::local_time(); 
sleep(5); 
stop = boost::posix_time::microsec_clock::local_time(); 
diff = stop - stop; 

tại

std::cout << to_simple_string(diff) << std::endl; 

trở lại thời gian ở định dạng hh:mm:ss.ssssss và tôi muốn có thời gian cũng như trong ss.sssssss.

để làm điều này, tôi đã cố gắng

boost::posix_time::time_duration::sec_type x = diff.total_seconds(); 

nhưng điều đó đã cho tôi câu trả lời trong định dạng của ss và seconds() lợi nhuận Trả số bình thường của giây (0..60).

Câu hỏi của tôi làm cách nào để tôi có được thời gian mô phỏng trong vài giây của định dạng ss.ssssss?

EDIT

tôi đã có thể làm:

std::cout << diff.total_seconds() << "." << diff.fractional_seconds() << std::endl; 

là có một cái gì đó tao nhã mà có thể vẽ ss.sssssss?

Trả lời

14

total_seconds() trả về giá trị long không được chuẩn hóa thành 0,60 giây.

Vì vậy, chỉ làm điều này:

namespace bpt = boost::posix_time; 

int main(int , char**) 
{ 
    bpt::ptime start, stop; 
    start = bpt::microsec_clock::local_time(); 
    sleep(62); 
    stop = bpt::microsec_clock::local_time(); 

    bpt::time_duration dur = stop - start; 

    long milliseconds = dur.total_milliseconds(); 

    std::cout << milliseconds << std::endl; // 62000 

    // format output with boost::format 
    boost::format output("%.2f"); 
    output % (milliseconds/1000.0); 
    std::cout << output << std::endl; // 62.00 
} 
+0

cảm ơn bạn đã phát lại của bạn. Theo ví dụ của bạn, tôi muốn sản lượng sau: 62.0000 (ss.ssssss). Nó có thể được không? – Eagle

+0

@Eagle: Tôi đã thêm một ví dụ với đầu ra mong muốn của bạn bằng cách sử dụng 'boost :: format'. Hy vọng nó giúp. – nabulke

1

Cách nhất thẳng về phía trước tôi thấy là một cái gì đó giống như sản lượng này, phần còn lại của tính toán thời gian dọc theo dòng của bài nabulke của:

#include <iomanip> 
double dseconds = dur.total_milliseconds()/1000. ; 

std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(3); 
std::cout << dseconds << std::endl; 

Bạn muốn thể hiện thời gian về số lượng dấu phẩy động, vì vậy tốt nhất nên sử dụng một số và áp dụng các trình xử lý định dạng luồng chuẩn.

+0

nó hoạt động, bạn nói đúng. Tôi đã thử nó bản thân mình, nhưng tôi quên "." .... vì vậy tôi có số nguyên – Eagle

1
// whatever time you have (here 1second) 
boost::posix_time::ptime pt = boost::posix_time::from_time_t(1); 
// subtract 0 == cast to duration 
boost::posix_time::time_duration dur = pt - boost::posix_time::from_time_t(0); 
// result in ms 
uint64_t ms = dur.total_milliseconds(); 
// result in usec 
uint64_t us = dur.total_microseconds(); 
// result in sec 
uint64_t s = dur.total_seconds(); 
std::cout << "s = " << s << ", ms = " << ms << ", us = " << us << std::endl; 

s = 1, ms = 1000, chúng tôi = 1000000

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