提升ASIO,如何在wait()之后获取时间?在c ++中

时间:2015-06-02 18:44:20

标签: c++ boost

所以让我说我有这个简单的主要方法:

        int main()
        {
          int altitude = 10;//in feet
          int altitude_rate = 3; //in feet/sec
          int new_altitude;

          boost::asio::io_service io;
          boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
          t.wait();

          new_altitude = altitude + (altitude_rate * 5(seconds));
          //I want to take the time I asked it to wait(5 sec in this case) and use it to 
          //calculate my new altitude.

          std::cout << "New Altitude: " << new_altitude << std::endl;

          return 0;
        }

是否有一项功能可以让我抽出时间并像int一样使用它?

2 个答案:

答案 0 :(得分:1)

deadline_timer在内部使用到期时间,因此会将您想要的延迟(5秒)添加到施工时的当前时间。 expires_from_now()将返回到期前的剩余时间(如果已经触发,则可以为负)。因此,你无法收回你最初给出的延迟。

您可以记住构建计时器的时间,并使用expires_at()来计算初始延迟,或者您可以将延迟保留在某处并使用它。

答案 1 :(得分:1)

您是否可以使用时差来计算时间差

boost::posix_time::ptime tick = boost::posix_time::microsec_clock::local_time();
// here's the deadline_timer waiting
boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_duration diff = now-tick;
int sec = diff.total_seconds();