J'utilise une minuterie dans mon jeu, il est démarré à l'intérieur d'un singleton et a un rappel appelé chaque milliseconde. Cependant, parfois, il tourne deux fois plus vite. C'est vraiment rare, je ne l'ai vu que 2 ou 3 fois (plus de 10.000 builds, des milliers d'exécutions).Windows timer fonctionne parfois deux fois plus vite
C'est la (partie importante du) Code:
//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);
}
Est-ce donc que si la création du singleton prend plus de 1 msec, alors il sera appelé deux fois parce que la fonction de minuterie appel
MilliSecondTimer::GetInstance()->SetTime(...)
?
Merci!
[Pourquoi les API Multimedia Timer (timeSetEvent) ne sont-elles pas aussi précises que je le pensais?] (Https://blogs.msdn.microsoft.com/mediasdkstuff/2009/07/02/why-are-the-multimedia -timer-apis-timesetevent-not-exact-as-i-would-expect /) –
Vous n'obtenez pas 1 msec sauf si vous * appelez * aussi timeBeginPeriod(). Ou un autre programme le fait pour vous, comme Chrome. –
Ce code provient d'un moment où le minuteur de Windows avait seulement une granularité autour de 50-60 msec. Ce n'est pas le problème ici. – Valmond