如何将双精度转换为 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));
我正在使用 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));