标签: c++-chrono

关于C++ 11中<chrono>头的几个问题

<chrono>在C++ 11中有几个关于新标题的问题.使用Windows 7,Visual Studio 2012.

查看示例http://en.cppreference.com/w/cpp/chrono

#include <iostream>
#include <chrono>
#include <ctime>

int fibonacci(int n)
{
    if (n < 3) return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

int main()
{
    std::chrono::time_point<std::chrono::system_clock> start, end;
    start = std::chrono::system_clock::now();
    int result = fibonacci(42);
    end = std::chrono::system_clock::now();

    int elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds>
                             (end-start).count();
    std::time_t end_time = std::chrono::system_clock::to_time_t(end);

    std::cout << "finished computation at " << std::ctime(&end_time)
              << "elapsed time: " << elapsed_seconds << "s\n";
}
Run Code Online (Sandbox Code Playgroud)

可能的输出

finished computation at Sat Jun 16 20:42:57 …
Run Code Online (Sandbox Code Playgroud)

c++ stl c++11 c++-chrono

10
推荐指数
1
解决办法
8464
查看次数

C++ 11 std :: chrono现在减去min

我觉得我对这个有点疯狂,但这对我来说没有意义.在我看来,如果我从now()呼叫返回的任何时间点减去最小时间点,我应该总是得到一个正的持续时间,但这不会发生.

#include <chrono>
#include <iostream>

typedef std::chrono::steady_clock myclock;

int main(int argc, char **argv) {
        myclock::time_point min = myclock::time_point::min();
        myclock::time_point now = myclock::now();
        auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(now - min).count();
        std::cout << millis << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

为什么打印负整数而不是正整数?(铿锵3.3或g ++ 4.8.1)

c++ c++-chrono

10
推荐指数
1
解决办法
6932
查看次数

最优雅的方式结合chrono :: time_point,从小时,分钟,秒等

我有一个" 人类可读的 "变量hours,minutes,seconds,day,month,year载有与他们的名字值(比方说,我有SYSTEMTIME从结构<windows.h>).
我发现创建一个的唯一方法chrono::time_point是:

SYSTEMTIME sysTime = ...; // Came from some source (file, network, etc. )
tm t;
t.tm_sec = sysTime.wSecond;
t.tm_min = sysTime.wMinute;
t.tm_hour = sysTime.wHour;
t.tm_mday = sysTime.wDay;
t.tm_mon = sysTime.wMonth - 1;
t.tm_year = sysTime.wYear - 1900;
t.tm_isdst = 0;
std::chrono::system_clock::time_point dateTime =
    std::chrono::system_clock::from_time_t( mktime( & t ) );
Run Code Online (Sandbox Code Playgroud)

首先,我失去了一毫秒SYSTEMTIME.
第二,(mmm ......)我不喜欢这种转换))

你能用更优雅的方式来解决这个问题吗?

c++ c++11 c++-chrono

10
推荐指数
1
解决办法
1301
查看次数

从struct timespec转换为std :: chrono ::?

我有一个struct timespec值的流.我想将它们转换为本机C++ 11表示,但我完全被chrono扭转了.什么是最好的目标以及如何从struct timespec或struct timeval到达那里,因为这是一个简单的转换,微秒对于这些时间是否足够好?我认为我想要达到这个目标,对吧?的std ::时辰:: SYSTEM_CLOCK :: time_point

在这种情况下,timespec是来自GPS的UNIX时间.是的,他们使用的是4字节秒(在内存中签名转换后的格式,然后写成无符号格式),它将被固定到2038年.

作为参考,我将把它添加到gsf的C++阅读器中

c++ time c++-chrono

10
推荐指数
1
解决办法
4331
查看次数

如何将 int 转换为 chrono 毫秒

我有一个毫秒类型的变量,我想将其设置为等于一个方程。这是我到目前为止所做的。它编译并运行,但当它到达这一行时,它停止输入下面的 if 语句。

time = duration<int>(750-(lvl*50));
Run Code Online (Sandbox Code Playgroud)

另一件需要注意的事情是,我确实有一个 if 语句,这也可能是我比较不同数据类型的问题的一部分。这是 if 语句:

if(time_since_last >= time) {
Run Code Online (Sandbox Code Playgroud)

自最后一个变量以来的时间是不同 2 high_resolution_clock::now() 的时间差

c++ c++-chrono

10
推荐指数
1
解决办法
2万
查看次数

用于记录时间戳的不同 C++ 时钟的优缺点是什么?

打印日志时,我希望每条消息都有一个时间戳,测量自程序启动以来的时间。最好以纳秒为单位,尽管毫秒也可以:

(  110 ns) Some log line 
( 1220 ns) Another log line 
( 2431 ns) Now for some computation...
(10357 ns) Error!
Run Code Online (Sandbox Code Playgroud)

据我了解,C++ chrono 库中有三种不同的时钟和另外两种 C 风格的时钟:

  • std::chrono::高分辨率时钟
  • std::chrono::system_clock
  • std::chrono::steady_clock
  • 标准::时间
  • 标准::时钟

对于上述任务,每种方法的优点和缺点是什么?

c++ time c++-chrono

10
推荐指数
1
解决办法
2589
查看次数

将steady_clock :: time_point转换为time_t

我正在使用它steady_clock来保存某些消息的时间戳.对于调试目的,可以使用日历(或类似的东西).

对于其他时钟,这是静态功能to_time_t,但在GCC(MinGW 4.8.0)上,此功能不存在.

现在我打印的东西像:

Timestamp: 26735259098242
Run Code Online (Sandbox Code Playgroud)

对于时间戳我需要一个steady_clock所以我不能使用system_clock或其他人.

编辑 上一个打印是从time_since_epoch().count()给出的

c++ c++11 c++-chrono

9
推荐指数
1
解决办法
1万
查看次数

获取POSIX epoch as system_clock :: time_point

我知道a的默认值std::chrono::system_clock::time_point是时钟的纪元,但是我在C++ 11标准中找不到任何system_clock与epix纪元相同的命令(1970-01-01T00:00: 00Z).在Linux和Windows上假设这种情况是否安全?或者使用它会更聪明std::chrono::system_clock::from_time_t(0)吗?

c++ time epoch c++-standard-library c++-chrono

9
推荐指数
1
解决办法
699
查看次数

为什么std :: chrono :: time_point不足以存储struct timespec?

我正在尝试最近的std::chronoapi,我发现在64位Linux体系结构和gcc编译器上time_point,duration类和类无法以最大分辨率(纳秒)处理操作系统的最大时间范围.实际上,似乎这些类的存储是一个64位的整数类型,相比于timespectimeval其内部使用两个64位整数,一个用于秒,一个用于纳秒:

#include <iostream>
#include <chrono>
#include <typeinfo>
#include <time.h>

using namespace std;
using namespace std::chrono;

int main()
{
    cout << sizeof(time_point<nanoseconds>) << endl;                       // 8
    cout << sizeof(time_point<nanoseconds>::duration) << endl;             // 8
    cout << sizeof(time_point<nanoseconds>::duration::rep) << endl;        // 8
    cout << typeid(time_point<nanoseconds>::duration::rep).name() << endl; // l
    cout << sizeof(struct timespec) << endl;                               // 16
    cout << sizeof(struct timeval) << endl;                                // 16
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在64位Windows(MSVC2017)上,情况非常相似:存储类型也是64位整数.在处理稳定(也称为单调)时钟时这不是问题,但存储限制使得不同的API实现不适合存储更大的日期和更宽的时间跨度,从而为类似Y2K的错误创造了基础.这个问题得到了承认吗?是否有更好的实施或API改进的计划?

gcc year2038 visual-c++ c++11 c++-chrono

9
推荐指数
1
解决办法
1184
查看次数

如何将 std::filesystem::file_time_type 转换为 time_t?

我使用 MSVC2015 为 windows 编写了一个解决方案,其中以下代码转换 std::filesystem::last_write_time 结果 time_t:

time_t ftime = std::file_time_type::clock::to_time_t(fs::last_write_time("/Path/filename"))
Run Code Online (Sandbox Code Playgroud)

它运作良好。然后,当我尝试使用 gcc 9.3 (-std=C++2a) 将解决方案移植到 Linux 时,出现以下错误:

错误:'to_time_t' 不是 'std::chrono::time_point::clock' {aka 'std::filesystem::__file_clock'} 的成员

我搜索了一个解决方案,但我发现是基于解决方案包括上例中的std ::文件系统:: last_write_time在cplusplus.com。解决方法如下图:

auto ftime = fs::last_write_time(p);
std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它对我不起作用。实际上,该示例有一条评论说它不适用于 MSVC(曾在 MSVC2015 上工作)或 GCC 9;C++20 将允许便携式输出。

现在,我被卡住了……我怎样才能使用 gcc 进行这种转换?

c++ c++-chrono

9
推荐指数
4
解决办法
3907
查看次数

标签 统计

c++-chrono ×10

c++ ×9

c++11 ×4

time ×3

c++-standard-library ×1

epoch ×1

gcc ×1

stl ×1

visual-c++ ×1

year2038 ×1