C++ 比较两个具有相同持续时间的 std::chrono::time_points 失败
C++ Failure comparing two std::chrono::time_points with same duration
我正在尝试将 std::chrono::time_point
转换为长变量,然后再转换回 std::chrono::time_point
class。 long 变量将用于在我的架构上发送 client/server 消息。
所以我有以下测试代码(代码here):
int main ()
{
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
auto epoch = now.time_since_epoch();
auto value = std::chrono::duration_cast<std::chrono::milliseconds>(epoch);
long duration = value.count();
std::cout << "Duration=" << duration << std::endl;
std::chrono::milliseconds ms(duration);
std::chrono::time_point<std::chrono::system_clock> dt(ms);
auto epoch1 = dt.time_since_epoch();
auto value1 = std::chrono::duration_cast<std::chrono::milliseconds>(epoch1);
long duration1 = value1.count();
std::cout << "Duration1=" << duration1 << std::endl;
if (dt != now)
std::cout << "Failure." << std::endl;
else
std::cout << "Success." << std::endl;
}
从输出来看,我有:
Duration=1436221951916
Duration1=1436221951916
Failure.
为什么两个持续时间相同但两次不相同(比较Failure
)?我在这里错过了什么?
感谢帮助。
您从 std::chrono::time_point
到 long
的转换将时间点四舍五入到毫秒。
参见this question on how properly serialize and deserialize time_point
s。
我正在尝试将 std::chrono::time_point
转换为长变量,然后再转换回 std::chrono::time_point
class。 long 变量将用于在我的架构上发送 client/server 消息。
所以我有以下测试代码(代码here):
int main ()
{
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
auto epoch = now.time_since_epoch();
auto value = std::chrono::duration_cast<std::chrono::milliseconds>(epoch);
long duration = value.count();
std::cout << "Duration=" << duration << std::endl;
std::chrono::milliseconds ms(duration);
std::chrono::time_point<std::chrono::system_clock> dt(ms);
auto epoch1 = dt.time_since_epoch();
auto value1 = std::chrono::duration_cast<std::chrono::milliseconds>(epoch1);
long duration1 = value1.count();
std::cout << "Duration1=" << duration1 << std::endl;
if (dt != now)
std::cout << "Failure." << std::endl;
else
std::cout << "Success." << std::endl;
}
从输出来看,我有:
Duration=1436221951916
Duration1=1436221951916
Failure.
为什么两个持续时间相同但两次不相同(比较Failure
)?我在这里错过了什么?
感谢帮助。
您从 std::chrono::time_point
到 long
的转换将时间点四舍五入到毫秒。
参见this question on how properly serialize and deserialize time_point
s。