C++とBoostを使用して現在の時間をミリ秒単位で取得する 質問する

C++とBoostを使用して現在の時間をミリ秒単位で取得する 質問する

私のスレッド(boost::thread を使用)では、現在の時刻をミリ秒以下で取得し、ミリ秒に変換する必要があります。

実際、ここを読んでいて、次のことがわかりました。

tick = boost::posix_time::second_clock::local_time();
now  = boost::posix_time::second_clock::local_time();

動作するようですが、その後は現在のミリ秒の長い値が必要になります...

どうすればいいですか?

ベストアンサー1

時間範囲を取得するために使用できますboost::posix_time::time_duration。例:

boost::posix_time::time_duration diff = tick - now;
diff.total_milliseconds();

より高い解像度を得るには、使用しているクロックを に変更します。たとえば に変更しますboost::posix_time::microsec_clockが、これは OS に依存する可能性があります。たとえば Windows では、 のboost::posix_time::microsecond_clock解像度はマイクロ秒ではなくミリ秒です。

ハードウェアに少し依存する例。

int main(int argc, char* argv[])
{
    boost::posix_time::ptime t1 = boost::posix_time::second_clock::local_time();
    boost::this_thread::sleep(boost::posix_time::millisec(500));
    boost::posix_time::ptime t2 = boost::posix_time::second_clock::local_time();
    boost::posix_time::time_duration diff = t2 - t1;
    std::cout << diff.total_milliseconds() << std::endl;

    boost::posix_time::ptime mst1 = boost::posix_time::microsec_clock::local_time();
    boost::this_thread::sleep(boost::posix_time::millisec(500));
    boost::posix_time::ptime mst2 = boost::posix_time::microsec_clock::local_time();
    boost::posix_time::time_duration msdiff = mst2 - mst1;
    std::cout << msdiff.total_milliseconds() << std::endl;
    return 0;
}

私の Win7 マシンでは、最初の出力は 0 または 1000 です。2 番目の解像度。時計の解像度が高いため、2 番目の出力はほぼ常に 500 です。少しでもお役に立てれば幸いです。

おすすめ記事