【发布时间】:2016-11-01 16:37:15
【问题描述】:
每当我调用这个可能是 30 次/秒的函数时,我都试图让 unix 时间戳达到毫秒级。下面的函数返回的时间戳总是相同的,但是当我将它打印到std::cerr 时,我得到不同的值。每次调用函数时我都会创建变量,所以我不确定我在这里做错了什么。任何帮助将不胜感激。
float GetUnixTimestamps()
{
float milliseconds_since_epoch =
std::chrono::duration_cast<std::chrono::milliseconds>
(std::chrono::system_clock::now().time_since_epoch()).count();
std::cerr << milliseconds_since_epoch << std::endl;
return milliseconds_since_epoch;
}
编辑:根据建议 我正在使用 C++ 11,需要在 Windows x64、x86 和 Linux(主要是 Ubuntu 和 CentOS)上编译它。我想在unix中获取当前时间。我已经阅读了 S.O 帖子 19555121 和 16177295 但时间戳的值仍然保持不变。
【问题讨论】:
-
听起来像是编译器优化。您需要发布minimal reproducible example,并说明您正在使用哪个编译器和哪些编译标志
-
定义“总是一样的”。
-
例如,第一次调用我得到 1478019383296,第二次调用相同的函数我仍然得到相同的值,即 1478019383296。转换星期二,2016 年 11 月 1 日 16:56:23.296 GMT,因为时间是以毫秒为单位,我希望看到基于下一次调用的值发生变化。
-
@UmangMukeshMehta:尝试在每次调用
std::this_thread::sleep_for(std::chrono::milliseconds(33));结束时放置GetUnixTimestamps...你仍然得到相同的输出吗? -
致那些投票结束这个问题的人:您能否在给 OP 时间澄清问题之前停止结束问题?这不仅会激怒提出问题的人,也会激怒那些试图帮助他的人。