我有一个班级来衡量调用Start
和Stop
之间的时间。我创建了一个单元测试,在boost::this_thread::sleep
和Start
之间使用Stop
进行休眠,并测试结果是否接近睡眠时间。
但是,此测试在我们的构建代理上失败,但在我们的开发机器上失败。问题是:我如何知道这是否是秒表的实际问题,或者如果构建代理(运行其他进程,作为虚拟机)可能比我告诉它的时间更长,这是一个“问题”?
所以问题是:是否有一种强有力的方法可以写出“做一些需要x秒的事情?”
非常感谢!
答案 0 :(得分:7)
没有办法在非实时系统上可靠地测试这样的东西。要做的就是包装API以获取秒表使用的系统时间并在测试中模拟它们。
答案 1 :(得分:1)
这取决于您使用的操作系统。在支持多程序设计的系统上,线程的运行时间不确定。但是,在某些实时系统中,如果您的线程是最重要的,那么它几乎是准确的。您应该能够禁用中断来模拟这种情况,因为您的线程不会被OS调度程序抢占。
答案 2 :(得分:1)
在睡眠前后取系统时间,仅参考这些时间之间的差异而不是睡觉时间。
答案 3 :(得分:1)
秒表的分辨率是多少?如果您需要精确到几秒钟,那么睡眠3秒钟,看看你是否在2.9和3.1之间将适合你。如果您需要mili / nano秒精度,您应该使用第一个回复中建议的时间戳模拟。