Точное событие - if с проверкой входа. Точней не бывает.
Если не нужно немедленно реагировать - if с проверкой тогда, когда можно и отреагировать.
Нету за ненадобностью. Да и глупость сама по себе. Свои ифы меняем на ифы внизу? Даже описалово уже косячное - несколько одновременных срабатываний на разных каналах, и ? Имеем этих переменных с временем столько же сколько самих входов? Коза+баян.
И да, 1мс цикла это 500Гц да и идеального меандра.
Энкодер нифига не даст кроме самого факта срабатывания чего то там.
Если за каким то потребовалось быстрее 1мс не ждите "следующего шага" , переходите сразу. Или syslibport. Или другое оборудование