2015-03-16 3 views
0

У меня есть функция, которая возвращает std::time_t от момента времени steady_clock:Продолжительность от станд :: time_t (между steady_clock)

static const time_t steady_clock_to_time_t(steady_clock::time_point t) 
{ 
    return system_clock::to_time_t(system_clock::now() 
              + (t - steady_clock::now())); 
} 

В одной функции я получаю время с точки зрения станд :: time_t по говоря:

steady_clock::time_point p1 = steady_clock::now(); 
const std::time_t t1 = steady_clock_to_time_t(p1); 

в другой функции t1 получает передается в мне нужно рассчитать, сколько времени потребовалось, чтобы получить от t1 до t2, но ничего из этого не работает:.

void func(std::time_t t1) 
{ 
    std::cout << t1 << '\n'; 
    steady_clock::time_point tp2 = steady_clock::now(); 
    steady_clock::time_point tp1 = system_clock::from_time_t (t1); 

    // see how long it took 
    std::chrono::duration<double> timeTaken{std::chrono::duration_cast<std::chrono::duration<double>>(tp2-tp1)}; 

    auto d = std::chrono::duration_cast<std::chrono::microseconds>(tp2 - tp1).count(); 

    std::cout << "Took: " << d << " microseconds\n"; 

Дан зЬй :: time_t, который был датируемым с помощью неуклонных часов (с помощью функции преобразования выше, но я открыт для чего-то еще), как я тогда метки времени позже, а затем посмотреть, как долго он взял в микросекундах между двумя временами?

EDIT:

const std::time_t t1 = steady_clock::now().time_since_epoch().count(); 

Это получает передается Func

void func(std::time_t t1) 
{ 
    steady_clock::time_point tp2 = steady_clock::now(); 

Как получить длительность в микросекундах между ТР2 и t1?

+1

Вы должны объяснить, что вы имеете в виду «это не работает». В любом случае, в практическом смысле это невозможно, потому что разрешение на время, измеряемое 'time_t', составляет одну секунду, поэтому вы не можете приблизиться к точности микросекунды. – Hurkyl

+0

Есть ли способ конвертировать возвращаемое значение stable_clock :: now() в длинное целое число? – Ivan

+0

'now()' возвращает 'time_point'; вы можете использовать 'time_point :: time_since_epoch()', чтобы преобразовать его в длительность с момента запуска его часов. Как вы уже видели, 'duration :: count()' вернет числовое значение тиков, которое вы желаете. – Julian

ответ

0

Ok я понимаю:

long t1 = steady_clock::now().time_since_epoch().count(); 

func(t1); 

typedef std::chrono::duration<long, std::ratio<1l,1000000000l>> micros_type; 
func(long d1) 
{ 
    auto time1 = std::chrono::duration_cast<std::chrono::microseconds>(micros_type(d1)); 
    auto time2 = std::chrono::steady_clock::now().time_since_epoch(); 

    auto d = std::chrono::duration_cast<std::chrono::microseconds>(time2 - time1).count(); 

 Смежные вопросы

  • Нет связанных вопросов^_^