Bonjour à tous
Dans une application Delphi, je cherche à exécuter une action répétitive sur un port série avec une précision de l'ordre de la milliseconde.
Je pensais pouvoir cadencer cette action avec un timer très précis (ZylTimer).
Malheureusement, la précision est complètement perturbée par la prise en compte par Windows des taches qui tournent en parallèle de mon application.
Je ne sais pas comment Windows répartit l'exécution de toutes ses tâches, mais je vois sur un oscilloscope que mon action est retardée régulièrement de 50 à 100 millisecondes. Celà est manifestement dû au fait que mon application reçoit l'évènement Timer en retard car cet évènement est arrivé pendant qu'une autre tâche se déroulait dans la CPU.
J'ai essayé d'affecter une priorité TIMECRITICAL sur mon application avec la fonction SETPRIORITYCLASS. Celà améliore un tout petit peu le cadencement mais ne résoud pas le problème car, de toutes façons, il faut bien que Windows passe la main à ses tâches annexes à un moment donné ou à un autre.
Créer un thread pour exécuter mon action répétitive ne change rien puisque le thread s'exécute comme une nouvelle application.
Bref, je ne vois pas du tout comment je peux faire pour éxécuter cette action répétitive avec la précision voulue.
J'imagine qu'il faudrait que l'action s'éxécute à un niveau système très très bas, ou que, lorsque l'évènement Timer arrive, le système repasse immédiatement la main à l'application qui l'attend. Celà est-il possible ?
Si vous avez une idée, je suis preneur.
A vous lire
Gabriel
78 - Noisy le Roi
Partager