要创建当前时间的时间点,您可以使用:std::chrono::system_clock::now()。
但是,我不知道如何创建自 UNIX 纪元以来给定毫秒数的时间点?
另外,std::chrono::time_point甚至是推荐的方式来及时表示“瞬间”?还是应该std::time_t优先考虑?
我来这里是为了解决令我感到沮丧的情况.很多.首先,我在Windows上,我使用MinGW作为编译器(C++).
我在使用cpp-netlib和SSL(尝试POST到https站点)的程序中遇到了一些问题.我相信一切都井井有条,除了这一个不断躲避我的错误.
C:\boost_1_50_0\boost_1_50_0\stage\lib\libboost_thread-mgw46-mt-1_50.a(thread.o):thread.cpp|| undefined reference to 'boost::chrono::system_clock::now()'
我确信我已经链接到chrono,以及所有的.a libs BOOST_ROOT/stage/lib.我已经尝试重新排序,所以chrono在线程之前被链接.什么都没有帮助.我已经尝试BOOST_CHRONO_INLINED在我的IDE设置和多个conf.hpps中定义它仅使其成为标题,这没有帮助.
我很确定这是一个新手问题,我希望有人能给我一个快速解决方案.我匆匆写了这篇文章,因为我必须在某个地方,但如果你需要更多信息请说出来,我回家后可以更仔细地写.谢谢!
如果我有以下时钟并使用它来计算自时钟纪元以来的滴答计数,那么这个计数实际上代表什么。
std::chrono::high_resolution_clock::now().time_since_epoch().count();
Run Code Online (Sandbox Code Playgroud)
例如,我刚刚运行了这个并得到了1389375799048790227. 这个数字是什么意思?是纳秒、微秒等吗?
unsigned int Tick = GetTickCount();
Run Code Online (Sandbox Code Playgroud)
该代码仅在 Windows 上运行,但我想使用 C++ 标准库,以便它可以在其他地方运行。
我搜索过std::chrono,但找不到类似的功能GetTickCount()。
你知道我应该使用什么吗std::chrono?
我正在尝试创建一个表(一个9乘11的数组),它存储一个函数通过几个排序函数所花费的时间.
我想我希望这个表是一个字符串.我目前无法解决如何转换chrono到string并且无法在线查找任何资源.
我是否需要放弃表格的字符串输入,或者有没有办法将这些时间差异存储在字符串中?
for (int i = 0; i<8;i++) // sort 8 different arrays
{
start = chrono::system_clock::now();
//Sort Array Here
end = chrono::system_clock::now();
chrono::duration<double> elapsed_seconds = end-start;
table[1][i] = string(elapsed_seconds) // error: no matching conversion for functional style cast
}
Run Code Online (Sandbox Code Playgroud) 我需要将一种转换std::chrono::duration为另一种,但我需要知道何时无法进行这种转换,因为该值无法表示.
我没有在标准库中找到任何设施来检查这一点.该cppreference页面没有指定值是否超出范围会发生什么,只能从浮点到整数的转换可能是不确定的行为(在我来说,我需要从整数转换为整数).
std::chrono宣称它可以将结果报告到纳秒级别.在典型的x86_64 Linux或Windows机器上,人们期望它的准确度如何?例如,对于10 ns,10μs,10 ms和10 s的测量,误差条是多少?
我编写了以下代码来获取自午夜以来的秒数。
但是,我对 C 时间日期结构并不擅长。是否有使用标准 C++ 库执行此操作的更简单方法?
// Get today's date
time_t aTime = time(NULL);
// Set the time to midnight
struct tm* tm = localtime(&aTime);
tm->tm_sec = 0;
tm->tm_min = 0;
tm->tm_hour = 0;
tm->tm_isdst = -1;
time_t midnight = mktime(tm);
// Create object representing now
struct timespec now;
clock_gettime(CLOCK_REALTIME, &now);
// Number of seconds (now) since Epoch
const uint64_t nowSecsSinceEpoch = now.tv_sec;
// Number of seconds (now) since midnight = seconds (now) since Epoch minus seconds (at midnight) since …Run Code Online (Sandbox Code Playgroud) 我想以秒为单位测量经过的时间。用std::chrono::steady_clock我做。然而,它受到系统时间变化的影响。
稳定时钟不应该不受系统时间变化的影响吗?
我怎样才能做到这一点?
这是代码:
#include <iostream>
#include <chrono>
#include <time.h>
std::chrono::steady_clock::time_point t = std::chrono::steady_clock::now();
/* Change system time */
std::time_t tnow = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
tnow -= 20;
std::cout << "stime: " << stime(&tnow) << std::endl;
/********************************************************/
sleep(5);
std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
std::cout << "ELAPSED: " << std::chrono::duration_cast<std::chrono::seconds>(t2-t).count() << std::endl;
Run Code Online (Sandbox Code Playgroud)
结果如下:
stime: 0
ELAPSED: -15
Run Code Online (Sandbox Code Playgroud)
我想得到的是:
ELAPSED: 5
Run Code Online (Sandbox Code Playgroud)
编辑:
我添加了 C 标签,因为它似乎是一个内核(或板的构建根)错误。那么,如果没有,我怎么能做到这一点chrono?我的意思是,直接(无需观看系统时间更改)。
人们在chrono之前是如何生活的?
C++20 添加了时区支持std::chrono,其中包括闰秒。然而,似乎只支持闰秒插入,而不支持闰秒删除,即负闰秒。(诚然,自 1972 年以来,只有正闰秒;但在过去几年中,这种趋势似乎已经逆转,未来几年似乎有可能出现负闰秒。)
从类的描述方式中可以明显看出这一点std::chrono::leap_second- 无法区分正闰秒和负闰秒。
是否知道为什么std::chrono不支持这种可能性?这是一种优化,还是某种错误?或者它已经支持但我错过了一些东西?
注意:MSVC 实现似乎有一个允许负闰秒的非标准功能。
c++ ×10
c++-chrono ×10
c++11 ×2
c++20 ×2
time ×2
boost ×1
boost-thread ×1
c++17 ×1
gettickcount ×1
leap-second ×1
precision ×1
std ×1
string ×1