Der von Ihnen gemessene Jitter setzt sich aus vier Komponenten zusammen:
A: Verzögerung zwischen Anlegen des IRQ und Aufruf des Interrupt-Handlers
Entsteht dadurch, dass BUS belegt ist oder Interrupts gesperrt sind
B: Verzögerung innerhalb des Scedulers, d.h. Triggerung des Interrupt-Threads
Ihr Programm läuft zwar auf Prio 0 gibt jedoch die CPU durch WaitForSingleObject ab.
D.h. unter Umständen findet ein Process-Switrch statt oder ein anderer Thread führt eine Aktion
aus die nicht unterbrochen werden kann.
C: Verzögerung beim Toggeln des Pin's durch Aufruf des DIO Treibers
Bei Aufruf des DIO Treibers muss device.exe geladen werden
D: Verzögerung durch CPU bis Pin getoggelt wird (-> Pipeline)
Nach unseren Messung kommt ein Großteil der Verzögerung durch das Toggeln des DIO Ports. D.h. die Zeit vom Anlegen des IRQ bis Ihr Thread gestartet wird ist sicherlich kleiner 5 us. Der Jitter lässt sich nur reduzieren in dem weniger Threads laufen. Dies kann erreicht werden durch Abschalten aller nicht benötigter Treiber. Insbesondere USB, Audio u.s.w.. Ansonsten würde ich für eine zeitkritische Anwendung immer einen externen Controller verwenden.
Grüße
Holger Frölich