web-dev-qa-db-ja.com

C ++およびBoostを使用して現在の時間をミリ秒単位で取得します

スレッドで(boost :: threadを使用して)現在の時間をms以下で取得し、msに変換する必要があります。

実際、ここを読んで私はこれを見つけました:

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

そしてうまくいくようですが、今のミリ秒の長い値が必要になった後...

どうすればいいですか?

51
ghiboz

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です。少しでもお役に立てば幸いです。

68
mkaes

ミリ秒を意味する場合エポック以降

ptime time_t_Epoch(date(1970,1,1)); 
ptime now = microsec_clock::local_time();
time_duration diff = now - time_t_Epoch;
x = diff.total_milliseconds();

しかし、あなたが何を望んでいるのかは特に明確ではありません。

Boost Date Time にあるDateTimeのドキュメントの例をご覧ください。

13
Brian O'Kennedy
// Get current date/time in milliseconds.
#include "boost/date_time/posix_time/posix_time.hpp"
namespace pt = boost::posix_time;

int main()
{
     pt::ptime current_date_microseconds = pt::microsec_clock::local_time();

    long milliseconds = current_date_microseconds.time_of_day().total_milliseconds();

    pt::time_duration current_time_milliseconds = pt::milliseconds(milliseconds);

    pt::ptime current_date_milliseconds(current_date_microseconds.date(), 
                                        current_time_milliseconds);

    std::cout << "Microseconds: " << current_date_microseconds 
              << " Milliseconds: " << current_date_milliseconds << std::endl;

    // Microseconds: 2013-Jul-12 13:37:51.699548 Milliseconds: 2013-Jul-12 13:37:51.699000
}
8