【发布时间】:2016-04-08 09:43:46
【问题描述】:
我在我的游戏中使用了一个计时器,它在一个单例中启动,并且每毫秒都有一个回调。但是,有时它的运行速度是原来的两倍。真的很少见,我只见过 2 到 3 次(10.000+ 次构建,数千次执行)。
这是(重要的)代码:
//local variable in the .cpp:
static float milliseconds=0;
//the "actual" variable used in the game
long int MilliSecondTimer::milliseconds=0;
void CALLBACK TimerProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
milliseconds++;
MilliSecondTimer::GetInstance()->SetTime(int(milliseconds), int(guimseconds));
}
MilliSecondTimer::MilliSecondTimer()
{
UINT TimerID = timeSetEvent(1, 0, TimerProc, 0, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
}
是不是这样如果单例的创建时间超过1毫秒,那么就会被调用两次,因为定时器函数会调用
MilliSecondTimer::GetInstance()->SetTime(...)
?
谢谢!
【问题讨论】:
-
除非您也调用 timeBeginPeriod(),否则您不会获得 1 毫秒。或者其他程序为您执行此操作,例如 Chrome。
-
这段代码来自windows计时器只有50-60毫秒左右的粒度。这不是这里的问题。