Bonjour,
je realise un programme qui doit communiquer avec une carte d'acquisition video. Lorsqu'une nouvelle image arrive, le pilote de la carte d'acquisition appelle un callback. L'ecart de temps entre les appels de ce callback devrait etre de 40ms, puisque c'est la periode a laquelle les images sont envoyees. Or il se trouve que les mesures sont tres bizarres, et dependent du fait que Windows Media Player soit lance ou non. Au depart je n'y croyais pas, mais j'ai repete l'experience de nombreuses fois, et le phenomene se reproduit systematiquement :
Si WMP n'est pas lance, les ecarts sont les suivants:
OnFrame : 23ms
OnFrame : 57ms
OnFrame : 23ms
OnFrame : 57ms
....
Par contre si on lance WMP, ca change tout, et ca devient plus precis:
OnFrame : 40ms
OnFrame : 39ms
OnFrame : 40ms
OnFrame : 40ms
OnFrame : 41ms
OnFrame : 40ms
....
Je precise que je mesure le temps avec timeGetTime, le priority boost lie aux interruptions est actif, j'ai donne a mon processus et a mon thread la priorite maximale (REALTIME_PRIORITY_CLASS, THREAD_PRIORITY_TIME_CRITICAL), et que ca marche meme si WMP n'est pas en train de jouer un fichier (il suffit qu'il soit lance).
Est-ce que ceux d'entre vous qui auraient deja touche a des problemes de timing ont deja rencontre ce comportement? Comment le reproduire ? Mon hypothese, c'est que WMP doit provoquer le basculement d'un parametre de l'OS affectant toutes les applications.