Hi, ernestsnaith
It's pretty subjective on what 'a better way' is. Within my simplistic mind, interrupts are always the better way.
But for your application, there is a simpler way.
You can do both ends of a one-shot with the timer, in one routine, without any delays.
You would use a timer channel, and set the output high directly in that routine. You would then program the output-compare function to set the output low at some point in the future, and you're done.