草庐IT

c++ - 在 32 位和 64 位程序中使用 std::chrono::duration::rep 和 printf

有这段代码:#include#includeintmain(){autod=std::chrono::microseconds(1).count();printf("%lld",d);return0;}在64位模式下编译时,会出现警告:main.cpp:Infunction‘intmain()’:main.cpp:7:19:warning:format‘%lld’expectsargumentoftype‘longlongint’,butargument2hastype‘longint’[-Wformat=]printf("%lld",d);^在32位模式(使用-m32标志)下编译时不

c++ - 存储 std::chrono::duration 作为成员的类?

我想创建一个类,它的构造接受一个std::chrono::duration参数并将结果存储在一个成员中,以便我稍后可以将它传递给std::this_thread::sleep_for().我知道我可以编写一些像sleep_for一样工作的函数模板,如下所示:templatevoidmySleep(std::chrono::durationtime){std::this_thread::sleep_for(time);}这可能是一个类的成员函数。但是下面的情况呢?classUsesDuration{public:templateUsesDuration(std::chrono::dura

c++ - std::chrono:将自定义持续时间添加到 time_point

以下代码可以编译(g++4.7.2):#includetypedefstd::chrono::durationdouble_prec_seconds;typedefstd::chrono::time_pointtimepoint_t;voiddo_something(consttimepoint_t&tm){//...}intmain(intargc,char**argv){timepoint_tt0=std::chrono::system_clock::now();timepoint_tt1=t0+std::chrono::seconds(3);//timepoint_tt3=t0+

c++ - 使用 chrono::high_resolution_clock::now() 的奇怪行为

我一直在研究各种游戏计时循环方法,例如格伦·菲德勒和德维特。由于我自己的C++知识有限,我发现关键区域很难理解。有了这个,我开始尝试实现我自己的方法……我想出了一个很好的方法来尝试理解这些方法。[edit1:我使用CodeBlocksIDE和minGW-w64(x64-4.8.1-posix-seh-rev5)作为编译器][edit2:修改代码和输出窗口以包含第三个计时器,QueryPerformanceCounter]在尝试完成此任务时,我遇到了以下问题:最少的代码:#include#include#include#includeusingnamespacestd;usingname

c++ - 带有 std::thread 和 std::chrono 的基本计时器

我正在尝试使用经典方法实现一个基本计时器:start()和stop()。我将c++11与std::thread和std::chrono一起使用。启动方法。创建一个在给定间隔时间内休眠的新线程,然后执行给定的std::function。当“运行”标志为真时重复此过程。停止方法。只需将“运行”标志设置为false。我创建并启动了一个显示“Hello!”的Timer对象。每秒,然后与其他线程一起尝试停止计时器,但我不能。计时器永远不会停止。我认为问题出在th.join()[*]上,它在线程完成之前停止执行,但是当我删除th.join()行时,显然程序在计时器开始计数之前完成。那么,我的问题是

c++ - 如何将分数纪元时间戳( double )转换为 std::chrono::time_point?

我有一个小数纪元时间戳,表示为double,我想将其转换为适当的std::chrono::time_point。纪元是自1/1/1970以来的常用UNIX纪元。我知道存在std::chrono::system_clock::from_time_t,但是time_t没有小数部分。使用C++11方法执行此操作的最佳方法是什么?这个问题与unixtimestamptoboost::posix_time::ptime有关,除了它要求的是C++11而不是它的Boost版本。 最佳答案 假设纪元与已知的时钟类型相同,您可以使用具有double表

C++ 转换运算符到 chrono::duration - 适用于 c++17 但不适用于 C++14 或更低版本

以下代码使用设置为C++17的gcc7.1.0进行编译,但不使用设置为C++14(或VisualStudio2017)进行编译。在Wandbox上很容易重现.要让它与C++11/14一起工作,必须做些什么?#include#includeintmain(){structConvert{operatorstd::chrono::milliseconds(){std::cout 最佳答案 让我们从为什么这在C++14中不起作用开始。std::chrono::duration有两个相关的c'tors(std::chrono::millis

c++ - 使用 C++ Chrono 处理更新循环?

我肯定对新的C++chrono库有点迷茫。这里我有一个更新循环。它运行两个操作:engine.Update()engine.Render()这些都是很长的操作,很难说它们有多长。因此,我们测量它们花费了多长时间,然后进行一些计算并找出在我们调用渲染之前逐渐调用更新的最佳方法。为此,我使用了C++11的Chrono功能。我选择它是因为它听起来很划算:更准确,更依赖于平台。不过,我发现我遇到的问题比现在多。以下是我的代码,以及我的主要问题。非常需要有关问题或正确操作方法的任何帮助!我在评论中直接在有问题的行旁边标记了我的问题,我将在下面重申。头文件:classMyClass{private

C++11 std::chrono 现在减去最小值

我觉得我对这个有点疯狂,但这对我来说没有意义。在我看来,如果我从now()调用返回的任何时间点中减去最小时间点,我应该总是得到一个正的持续时间,但这种情况并没有发生。#include#includetypedefstd::chrono::steady_clockmyclock;intmain(intargc,char**argv){myclock::time_pointmin=myclock::time_point::min();myclock::time_pointnow=myclock::now();automillis=std::chrono::duration_cast(now

c++ - <chrono> 和 <ctime> 有什么区别?

为了测量函数的执行时间,我可以同时使用两者。但是使用有什么区别呢?和?我应该更喜欢一个而不是另一个吗? 最佳答案 ctime是一个C风格的头文件,它很旧,类型不安全并且不如chrono准确。chrono是C++中的首选选项;它是一个当代的C++头文件,它是类型安全的,在我们的硬件允许的情况下是准确的,它具有扩展的功能,更重要的是,它遵循C++(而不是C)逻辑,因此某些事情会更自然/更有表现力等等我们可能期望它知道许多当代语言特性(线程、异常等)——我们不能对ctime做出相同的假设。也就是说,ctime(甚至是time.h)仍然有几