Кучно. Хоты бы Application.ProcessMessages воткнул! Если по уму делать - таймер по срабатыванию выставляет event, а ты его ловишь WaitForSingleObject(..) и ресетишь - вместо a:=1. Только так можно разгрузить проц на глухих ожиданиях.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)