C ++ duration_cast <>(time_point_end-tine_point_start)。 count()溢出

问题描述 投票:1回答:1

[对不起,如果我使用英语不好。

我想做什么,我的项目:

例如,我想制作一个程序,等待0.5秒,然后执行某项操作,比如说cout <

我尝试过的事情:

[我试图保持两个时间点(time_point start,end),duration_cast在for循环中((int i = 0; i <10; i ++)),如果它们之间存在差异,则传递它们的差异(end-start)。是500毫秒,然后,cout <

#include <iostream>
#include <chrono>
#include <ctime>
using namespace std;
using namespace chrono;

int main()
{
    time_point<steady_clock> t = steady_clock::now():
    for (int i = 0; i < 10;)
    {
        duration<double> d = steady_clock::now() - t;
        uint32_t a = duration_cast<milliseconds>(d).count();
        if (a >= 500)
        {
            cout << a << " Hello World!" << endl;
            t = steady_clock::now();
            i++;
        }
    }
    return 0;
}

我的问题:

在大多数情况下,它会溢出,我不知道到底是什么溢出,但是有时似乎是6?其他47 ??? (?=一些数字)我尝试了很多事情,最终得到了这样的结果:

#include <iostream>
#include <chrono>
#include <ctime>
using namespace std;
using namespace chrono;

int main()
{
    time_point<high_resolution_clock> t = high_resolution_clock::now();
    for (int i = 0; i< 10;)
    {
        duration<double,ratio<1,1000000>> d = high_resolution_clock::now() - t;
        uint32_t a = duration_cast<microseconds>(d).count();
        if (d >= microseconds(500000) )
        {
            cout << a << " Hello World!" << endl;
            i++;
            t = high_resolution_clock::now();
        }
    }
    return 0;
}

它并没有解决问题,但是出现的最大值是〜1500(1500000,以微秒为单位),当它发生时,打印消息需要花费更长的时间,老实说,我不知道它是否仍然溢出,但是...

Anyway

无论如何,您对如何阻止溢出有任何建议,或者有完全不同的方式来实现我想要的,即使您没有,也谢谢您花时间阅读我的问题,我希望表达别人的问题,如果有人和我有同样的问题。

c++ duration
1个回答
0
投票

不确定这是否是您要的内容。但是,如果没有,也许我们可以在此基础上找出您想要的东西:

#include <chrono>
#include <iostream>

int
main()
{
    using namespace std;
    using namespace std::chrono;

    auto t = steady_clock::now();
    for (int i = 0; i < 10; ++i)
    {
        auto t1 = t + 500ms;
        while (steady_clock::now() < t1)
            ;
        cout << duration<double>(t1-t).count() << " Hello World!" << endl;
        t = t1;
    }
}

该代码在将来将time_point设置为500ms,然后进入忙循环,直到现在该将来time_point

© www.soinside.com 2019 - 2024. All rights reserved.