/* compile line: g++ -Wall -Wconversion --std=gnu++0x -o millis-timer millis-timer.cpp \ -lboost_timer -lboost_date_time -lboost_thread-mt -lboost_chrono-mt -lboost_system */ #include #include #include #include #include namespace bc = boost::chrono; namespace bt = boost::timer; namespace bpt = boost::posix_time; namespace btt = boost::this_thread; static bpt::ptime MillisecondsFromNow( const int milliseconds ) { const bpt::ptime now( bpt::microsec_clock::universal_time() ); auto const offset = bpt::milliseconds( milliseconds ); std::clog << "now=" << now << ", offset=" << offset << std::endl; return now + offset; } int main( int argc, char * argv [] ) { bt::nanosecond_type const ten_seconds( 10LL * 1000 * 1000 * 1000 ); bt::cpu_timer timer; long count = 0; while ( true ) { btt::sleep( MillisecondsFromNow( 1000 ) ); // btt::sleep_until( bc::system_clock::now() + bc::milliseconds( 1000 ) ); bt::cpu_times const elapsed_times( timer.elapsed() ); bt::nanosecond_type const elapsed( elapsed_times.wall ); if ( elapsed >= ten_seconds ) break; count++; } std::cout << count << '\n'; }