请教关于boost.chrono的一个问题


#1

代码:

#include <boost/thread/thread.hpp>
#include <boost/chrono.hpp>
#include <iostream>

using namespace std;
using namespace boost::chrono;
using namespace boost::this_thread;

int main()
{
	for(int i=0; i<10; ++i)
	{
		cout<<"Execute "<<i+1<<" time: "<<endl;

		time_point<system_clock> timeNow = system_clock::now();
		cout<<timeNow<<endl;
		cout<<" Sleep Start..."<<endl;
		sleep_for(milliseconds(1000));
		cout<<" Sleep End."<<endl;

		time_point<system_clock> timeAfter = system_clock::now();
		cout<<timeAfter<<endl;

		cout<<"Time elapsed: "<<timeAfter-timeNow<<endl<<endl;
	}

	return 0;
}

执行结果: 有时候sleep 1秒,有时候又是2秒?真是有点迷糊了。


#2

稍微修改修改你的代码吧… 太乱了, 你好意思把这样排版的代码拿出来的啊!!

稍微教你一下吧


int main();

会变成

int main();

明白用法了没, 用 ```c++ 和 ``` 把代码包起来


#3

好的,多谢了,现在改好了,帮看看是什么问题。


#4

在 linux 上这个测试程序没有问题, 睡眠时间都在 1s 左右.

这个问题应该是 windows 的调度程序的问题. 要精确的睡眠显然不能使用 sleep … …


#5

哦,其实也没要精确,只要不出错就行,关键是这里是错了1倍。有什么办法可以解决吗,用什么来做呢。


#6

sleep_for(milliseconds(100)); 误差就小多了吧?


#7

这个应该不能算解决的办法吧。。。


#8

那 sleep_for(milliseconds(10)); 呢?


#9

就是睡上 20s 也不算错误啊! 只要没有短于 1s 就不算错误. 没看 api 手册啊, 说了是 at least


#10

哦,谢了,我再看看,有问题再问你。