如何将双精度转换为 std::chrono::milliseconds

How to cast a double into std::chrono::milliseconds

我正在使用 boost::asio::steady_timer m_timer,如果我没记错的话,为了调用 m_timer.expires_after(expiration_time_ms);expiration_time_ms 应该是一个 std::chrono::milleseconds 变量。

然而,就我而言,我的到期时间为 double。我想知道是否可以将 double 转换为 std::chrono::milliseconds

目的是调用

void
setExpirationTime(my_casted_double) {
  boost::asio::steady_timer m_timer;
  m_timer.expires_after(my_casted_double)
}

一个不错的技巧是将您的值与计时文字相乘:

using namespace std::chrono_literals;

double time = 82.0;
auto t_82ms = time * 1ms;
std::this_thread::sleep_for(t_82ms);

反之亦然:

double time = t_82ms / 1s; // time == 0.082

m_timer.expires_after 将接受任何可转换为 boost::asio::steady_timer::duration 的持续时间,它不需要是 std::chrono::milliseconds (如果你不想丢弃你的小数毫秒您不应该转换为 std::chrono::milliseconds).

的持续时间

您可以将 double 转换为 std::chrono::duration,如下所示:

double milliseconds = 0.1;
std::chrono::duration<double, std::milli> chrono_milliseconds{ milliseconds };
但是,

chrono_milliseconds 不能自动传递到 expires_after,因为没有从浮点持续时间到整数持续时间的自动转换。您可以使用 std::chrono::duration_cast:

来解决这个问题
m_timer.expires_after(
  std::chrono::duration_cast<boost::asio::steady_timer::duration>(chrono_milliseconds));