如何验证是否我的数据是x秒旧使用chrono包
How to validate whether my data is x seconds old using chrono package?
我试图通过查看数据的时间戳来查看我的数据是否为120秒,所以我在使用std::chrono
包的库项目中有以下小代码:
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
bool is_old = (120 * 1000 < (now - data_holder->getTimestamp()));
// some logging to print out above values
LOG4CXX_WARN(logger, "data logging, now: " << now << ", data holder timestamp: " << data_holder->getTimestamp() << ", is_old: " << is_old << ", difference: " << (now - data_holder->getTimestamp()));
在上面的代码中,data_holder->getTimestamp()
是uint64_t,它以毫秒为单位返回时间戳。
现在,当我打印出now
变量值时,我看到了这个433425679
,当我打印出data_holder->getTimestamp()
值时,它是1437943796841
,现在和数据持有人时间戳的差异是18446742636199180454
,如下所示在日志中:
2015-07-26 13:49:56,850 WARN 0x7fd050bc9700 simple_process - data logging, now: 433425679 , data holder timestamp: 1437943796841 , is_old: 1 , difference: 18446742636199180454
现在,如果我使用epoch转换器转换数据持有人时间戳1437943796841
,我看到如下:
Your time zone: 7/26/2015, 1:49:56 PM
与日志2015-07-26 13:49:56,850 WARN
中显示的时间戳完全相同,因此这意味着我的数据看起来不是120秒的旧数据。如果是,那么为什么我看到is_old
值为1?
现在如果我运行这个简单的主程序,我看到is_old
返回0而不是1:
#include <iostream>
int main ()
{
bool is_old = (120 * 1000 < (433425679 - 1437943796841));
std::cout<<"is_old: " << is_old << std::endl;
}
怎么回事?为什么当我从主方法运行时,它返回0,而当我从项目中记录它时,它返回1。这是否意味着我运行主代码的方式与使用cmake命令构建库的方式不同?我正在使用生成tar文件的cmake命令构建我的项目可执行文件,然后我通过解压缩tar文件来运行它。我在Ubuntu 14.04上运行。
早些时候,我想我需要使用system_clock
而不是steady_clock
,但在我从主方法运行它之后,它看起来像别的东西正在发生。
无符号整数运算定义为2^numBits的算术模。
这意味着当你用你的无符号变量now - data_holder->getTimestamp()
和getTimestamp()
大于now
在你的例子中,操作将换行,你不会得到一个负值,但(通常相当大)一个相同的无符号整数类型的输入。
如果使用字面量,则它们的类型将带有符号,因此结果将如预期的那样为负。
现在,从任何来源减去时间戳和steady_clock::now
返回的值是否有意义,这是一个不同的问题。它很可能不会。您应该将当前时间与从相同来源(例如,都来自std::steady_clock
)获得的一些创建时间进行比较。
- 防止主数据类型C++的隐式转换
- 从持续时间构造std::chrono::system_clock::time_point
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何在c++迭代器类型中包装std::chrono
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 我们应该序列化 std::chrono::d uration 类还是 P.O.D.(普通旧数据)并且不需要序列化
- 如何验证是否我的数据是x秒旧使用chrono包