如何使用boost asio steady timer expiry获取执行时间点
How to use boost asio steady timer expiry to get the execute timepoint
我想获取 boost asio 稳定计时器触发的时间点。
文档说“expiry 获取计时器的到期时间作为绝对时间”。
我不明白什么是绝对时间。我不明白过期的结果。演示:(on wandbox)
#include <boost/asio.hpp>
#include <chrono>
#include <iostream>
int
main ()
{
using namespace boost::asio;
io_service io;
auto timer = steady_timer (io);
using namespace std::chrono_literals;
using namespace std::chrono;
std::cout << "before timer set" << std::endl;
std::cout << duration_cast<seconds> (timer.expiry ().time_since_epoch ()).count () << " seconds" << std::endl;
timer.expires_after (10s);
std::cout << "after timer set" << std::endl;
std::cout << duration_cast<seconds> (timer.expiry ().time_since_epoch ()).count () << " seconds" << std::endl;
std::cout << "current time using system_clock::now ()" << std::endl;
std::cout << duration_cast<seconds> (system_clock::now ().time_since_epoch ()).count () << " seconds" << std::endl;
return 0;
}
结果:
before timer set
0 seconds
after timer set
21652309 seconds
current time using system_clock::now ()
1626725470 seconds
我的问题是如何使用 boost asio 稳定计时器获取计时器触发的时间?
问题是您将苹果与橙子进行比较。 system_clock
和 steady_clock
不共享同一个纪元。换句话说,它们代表不同参考点的时间。
您必须经历 time_since_epoch()
才能对它们进行比较,这一事实表明您一开始就不应该比较它们。
如果将上次的打印输出替换为使用 steady_clock::now()
,输出将变为:
before timer set
0 seconds
after timer set
21656958 seconds
current time using system_clock::now ()
21656948 seconds
预期相差 10 秒。
My question is how to get the time when the timer fires with boost asio steady timer?
你可以通过获取expiry()
和当前时间之间的差值来获取计时器的剩余时间,这只是-
运算符,只要两个时间点是相对于相同的纪元:
cout << duration_cast<seconds>(timer.expiry() - steady_clock::now()).count() << " seconds" << std::endl;
我想获取 boost asio 稳定计时器触发的时间点。 文档说“expiry 获取计时器的到期时间作为绝对时间”。 我不明白什么是绝对时间。我不明白过期的结果。演示:(on wandbox)
#include <boost/asio.hpp>
#include <chrono>
#include <iostream>
int
main ()
{
using namespace boost::asio;
io_service io;
auto timer = steady_timer (io);
using namespace std::chrono_literals;
using namespace std::chrono;
std::cout << "before timer set" << std::endl;
std::cout << duration_cast<seconds> (timer.expiry ().time_since_epoch ()).count () << " seconds" << std::endl;
timer.expires_after (10s);
std::cout << "after timer set" << std::endl;
std::cout << duration_cast<seconds> (timer.expiry ().time_since_epoch ()).count () << " seconds" << std::endl;
std::cout << "current time using system_clock::now ()" << std::endl;
std::cout << duration_cast<seconds> (system_clock::now ().time_since_epoch ()).count () << " seconds" << std::endl;
return 0;
}
结果:
before timer set
0 seconds
after timer set
21652309 seconds
current time using system_clock::now ()
1626725470 seconds
我的问题是如何使用 boost asio 稳定计时器获取计时器触发的时间?
问题是您将苹果与橙子进行比较。 system_clock
和 steady_clock
不共享同一个纪元。换句话说,它们代表不同参考点的时间。
您必须经历 time_since_epoch()
才能对它们进行比较,这一事实表明您一开始就不应该比较它们。
如果将上次的打印输出替换为使用 steady_clock::now()
,输出将变为:
before timer set
0 seconds
after timer set
21656958 seconds
current time using system_clock::now ()
21656948 seconds
预期相差 10 秒。
My question is how to get the time when the timer fires with boost asio steady timer?
你可以通过获取expiry()
和当前时间之间的差值来获取计时器的剩余时间,这只是-
运算符,只要两个时间点是相对于相同的纪元:
cout << duration_cast<seconds>(timer.expiry() - steady_clock::now()).count() << " seconds" << std::endl;