我遇到了问题,找不到任何答案,因为我什至不知道要搜索什么。我已经使用 QueryPerformanceCounter 完成了一个计时器类,从我的应用程序中,我启动了第二个线程对象,它有自己的实例化计时器,我只有一个无限循环,从计时器获取增量时间并使用它来输出每个循环迭代的次数第二。
我注意到它给了我奇怪的值,所以我开始打印 delta time 并发现它有时会变为 0,所以我进入了返回 delta time 的方法并进行了一些测试。这是我的 deltaTime() 方法:
double MyTimer2::deltaTime()
{
LARGE_INTEGER timenow;
QueryPerformanceCounter(&timenow);
//std::cout << "timenow=" << (double)timenow.QuadPart << " currentticks=" << (double)m_currentTicks.QuadPart << std::endl;
double m_deltaTime = (double)(timenow.QuadPart - m_currentTicks.QuadPart) /* 1000.0*/ / (double)m_frequency.QuadPart;
m_currentTicks = timenow;
if(m_deltaTime < 0.000001)
return 0.0;
return m_deltaTime;
}
所以,我在“return 0.0;”上放了一个断点;发生的情况是它大部分时间都到达那里,这是不正确的。但是,如果我取消注释打印代码并运行,我将永远不会在断点处停止。所以理论上,我的打印代码使它正常工作,而如果我删除它,事情就会停止正常工作!这怎么可能,为什么会发生,我该如何解决?我试过 _ReadWriteBarrier() 失败。
提前致谢!
编辑:我需要一个用于物理模拟的高分辨率计时器!