[对不起,如果我使用英语不好。
我想做什么,我的项目:
例如,我想制作一个程序,等待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
无论如何,您对如何阻止溢出有任何建议,或者有完全不同的方式来实现我想要的,即使您没有,也谢谢您花时间阅读我的问题,我希望表达别人的问题,如果有人和我有同样的问题。
不确定这是否是您要的内容。但是,如果没有,也许我们可以在此基础上找出您想要的东西:
#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
。