Development Tip

기간을 int milli 및 float 초로 가져 오는 방법

yourdevel 2020. 10. 23. 19:10
반응형

기간을 int milli 및 float 초로 가져 오는 방법 ?


타이머와 기간에 chrono 라이브러리를 사용하려고합니다.

나는 Duration frameStart;(앱 시작부터) 및 Duration frameDelta;(프레임 사이의 시간 ) 을 가질 수 있기를 원합니다.

frameDelta기간을 밀리 초와 부동 초로 가져올 수 있어야합니다 .

새로운 C ++ 11 <chrono>라이브러리를 어떻게 사용합니까? 나는 그것에 대해 일하고 인터넷 검색을 해왔다 (정보가 희박합니다). 코드는 많이 템플릿 화되어 있고 특수 캐스트와 사물이 필요합니다.이 라이브러리를 올바르게 사용하는 방법을 알 수 없습니다.


이것이 당신이 찾고있는 것입니까?

#include <chrono>
#include <iostream>

int main()
{
    typedef std::chrono::high_resolution_clock Time;
    typedef std::chrono::milliseconds ms;
    typedef std::chrono::duration<float> fsec;
    auto t0 = Time::now();
    auto t1 = Time::now();
    fsec fs = t1 - t0;
    ms d = std::chrono::duration_cast<ms>(fs);
    std::cout << fs.count() << "s\n";
    std::cout << d.count() << "ms\n";
}

나를 위해 인쇄합니다.

6.5e-08s
0ms

"밀리 초 및 부동 초"가 무엇을 의미하는지 모르겠지만 이것은 당신에게 아이디어를 줄 것입니다.

#include <chrono>
#include <thread>
#include <iostream>

int main()
{
  auto then = std::chrono::system_clock::now();
  std::this_thread::sleep_for(std::chrono::seconds(1));
  auto now = std::chrono::system_clock::now();
  auto dur = now - then;
  typedef std::chrono::duration<float> float_seconds;
  auto secs = std::chrono::duration_cast<float_seconds>(dur);
  std::cout << secs.count() << '\n';
}

당신이 요구하는 것이 무엇인지 추측하십시오. 밀리 초 프레임 타이머로 다음과 같이 작동하는 것을 찾고 있다고 가정합니다.

double mticks()
{
    struct timeval tv;
    gettimeofday(&tv, 0);
    return (double) tv.tv_usec / 1000 + tv.tv_sec * 1000;
}

std::chrono대신 사용 합니다.

double mticks()
{
    typedef std::chrono::high_resolution_clock clock;
    typedef std::chrono::duration<float, std::milli> duration;

    static clock::time_point start = clock::now();
    duration elapsed = clock::now() - start;
    return elapsed.count();
}

도움이 되었기를 바랍니다.


에서 AAA 스타일 사용하여 명시 적으로 관용구 초기화 입력 :

#include <chrono>
#include <iostream>

int main(){
  auto start = std::chrono::high_resolution_clock::now();
  // Code to time here...
  auto end = std::chrono::high_resolution_clock::now();

  auto dur = end - start;
  auto i_millis = std::chrono::duration_cast<std::chrono::milliseconds>(dur);
  auto f_secs = std::chrono::duration_cast<std::chrono::duration<float>>(dur);
  std::cout << i_millis.count() << '\n';
  std::cout << f_secs.count() << '\n';
}

참고 URL : https://stackoverflow.com/questions/14391327/how-to-get-duration-as-int-millis-and-float-seconds-from-chrono

반응형