私のスレッド(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 です。少しでもお役に立てれば幸いです。