- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我试图通过查看数据的时间戳来查看我的数据是否为120秒旧数据,所以我有以下代码:
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
bool is_old = (120 * 1000 < (now - data_holder->getTimestamp()));
data_holder->getTimestamp()
是uint64_t,它以毫秒为单位返回时间戳。
now
变量值时,我看到了这个
10011360
,并且当我打印出了
data_holder->getTimestamp()
的
1437520382241
值时,现在和数据持有人时间戳的差应该为负吗?为什么它变得如下面的日志所示为正?
2015-07-21 16:13:02,530 WARN 0x7f35312d1700 data_check - now value: 10011360 , data holder timestamp: 1437520382241 , difference: 18446742636199180735
steady_clock
。我需要在这里使用
system_clock
吗?在外行方面,
steady_clock
和
system_clock
有什么区别。我在Ubuntu 14.04机器上运行此代码。
最佳答案
以相反的顺序回答问题:
What is the difference between
steady_clock
vssystem_clock
in layman terms.
system_clock
,您将其称为 watch ,它会告诉您现在几点了。
steady_clock
,您将其称为秒表,它将告诉您某人跑完一圈的速度,但不会告诉您现在几点。
Does my above code look right?
<chrono>
库犯的初学者错误。
<chrono>
库有一个简单的规则。该规则实际上并不完全正确(因此这是一个准则)。但是,它几乎足以纠正成为几乎始终遵循的准则:
Don't use
count()
.
Don't use
time_since_epoch()
.
<chrono>
库围绕类型安全的系统设计,旨在保护您免受单位转换错误的影响。如果您不小心尝试了不安全的转换,则该错误将在编译时捕获(与之相反,它是运行时错误)。
count()
和
time_since_epoch()
是此类型安全系统中的“转义线”,仅在紧急情况下使用。当(例如)委员会忽视为您提供完成
<chrono>
类型的工作所需的所有工具(例如I/O),或者例如需要通过整数与其他一些计时API交互时,就会出现此类紧急情况。
count()
和
time_since_epoch()
,并仔细检查这些函数的每种用法:是否可以通过任何方式重写代码以消除其使用?
uint64_t now = duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
now
是
time_point
(来自
steady_clock
)。它的单位是
milliseconds
,但是目前我不认为这些单位很重要。重要的是
now
是从
time_point
检索的
steady_clock
:
auto now = steady_clock::now();
bool is_old = (120 * 1000 < (now - data_holder->getTimestamp()));
data_holder->getTimestamp()
开始:如果可以修改
getTimestamp()
,则应该对其进行修改以返回
time_point
而不是
uint64_t
。为此,您将必须知道正确的单位(毫秒),
和,您必须知道正确的纪元。纪元是您以毫秒为单位的时间点。
system_clock()
的每个实现都使用1970-01-01作为其纪元(尽管每个实现从该纪元计算出不同的单位)。
getTimestamp()
以返回
time_point<system_clock, milliseconds>
,要么将
getTimestamp()
的返回结果包装在
time_point<system_clock, milliseconds>
中:
auto dh_ts = system_clock::time_point{milliseconds{data_holder->getTimestamp()}};
bool is_old = (120 * 1000 < (now - dh_ts));
If you see conversion factors in your
<chrono>
code, you're doing it wrong.<chrono>
lives for doing the conversions for you.
bool is_old = (minutes{2} < (now - dh_ts));
bool is_old = minutes{2} < now - dh_ts;
getTimestamp()
以返回类型安全的值,则该代码也可能类似于:
bool is_old = minutes{2} < now - data_holder->getTimestamp();
operator-()
和
now
之间没有有效的
dh_ts
。
This is the type-safety system coming in to save you from run time errors!
time_point
的
system_clock
减去
time_point
的
steady_clock
(因为两者具有不同的时期)。因此,您必须切换到:
auto now = system_clock::now();
#include <chrono>
#include <cstdint>
#include <memory>
struct DataHolder
{
std::chrono::system_clock::time_point
getTimestamp()
{
using namespace std::chrono;
return system_clock::time_point{milliseconds{1437520382241}};
}
};
int
main()
{
using namespace std;
using namespace std::chrono;
auto data_holder = std::unique_ptr<DataHolder>(new DataHolder);
auto now = system_clock::now();
bool is_old = minutes{2} < now - data_holder->getTimestamp();
}
bool is_old = 2min < now - data_holder->getTimestamp();
count()
(I/O除外)。 time_since_epoch()
(I/O除外)。 关于c++ - 稳定时钟与系统时钟之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552193/
平时很少在jquery中用到this。查看代码时发现用到了,就调试出this的值,心想原来如此。还是挺有用的。这里总结一下this与$(this)的区别和使用。 $(this)生成的是什么?
使用单例类和应用程序范围的托管 bean 来保存应用程序数据有区别吗? 我需要查找某些 JNDI 资源,例如远程 bean 接口(interface),因此我为自己编写了一个单例来缓存我的引用并且只允
如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子
vagrant box repackage有什么区别( docs ) 和 vagrant package ( docs )? 我意识到 vagrant package仅适用于 VirtualBox 提
我想看看是否有人可以解释为什么以下代码适用于 valueOf 但不适用于其他代码。 import java.math.BigDecimal; public class Change { publ
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: What is Closures/Lambda in PHP or Javascript in layman te
This question already has answers here: Vagrant, Docker, Puppet, Chef (3个答案) 2年前关闭。 docker和chef有什么共同
以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出: Changing from New to Fin OK 但在 Release模式下: Changing
////Creating Object var Obj; // init Object Obj= {}; 它们之间有什么区别两个? 有没有可能把它变成一个单行? 这样使用有什么好处吗?
我想找出定时器服务之间的区别。我应该使用哪个以及何时使用。我正在使用 Jboss 应用服务器。 1) java.ejb.Schedule。 @Schedule注解或配置自xml。 2) javax.e
我发现在 C++ 中可以通过三种不同的方式将对象传递给函数。假设我的类(class)是这样的: class Test { int i; public: Test(int x);
有什么区别。 public class Test { public static void main(String args[]) { String toBeCast = "c
如果我有一列,设置为主索引,设置为INT。 如果我不将其设置为自动递增,而只是将唯一的随机整数插入其中,与自动递增相比,这是否会减慢 future 的查询速度? 如果我在主索引和唯一索引为 INT 的
这两种日期格式有什么区别。第一个给出实际时间,第二个给出时间购买添加时区偏移值。 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]
如果有一个函数,请说foo: function foo() { console.log('bar'); } 那么在 JavaScript 中,从另一个函数调用一个函数有什么区别,如下所示: f
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
代码是什么: class Time { private: int hours; int minutes; int seconds; pu
我知道这是非常基本的,但有人介意解释一下这两个数组声明之间的区别吗: #include array myints; ...和: int myints[5]; ...以及为什么 myints.size
我学会了如何根据 http://reference.sitepoint.com/css/specificity 计算 css 特异性但是,基于this reference,我不明白伪类(来自c)和伪元
为什么在运行 2) 时会出现额外的空行?对我来说 1 就像 2。那么为什么 2) 中的额外行? 1) export p1=$(cd $(dirname $0) && pwd) #
我是一名优秀的程序员,十分优秀!