Hier ist den Verzögerung vermute ich. Wie oft passiert das, das kein IR Signal empfangen wird? Weil speed immer > 0 (einmal eingestellt mit 130, und keine änderung) ist wird er jeder Durchlauf (wann kein IR-Signal empfangen ist seit diesen Durchlauf und den vorherigen) einer halbe Sekunde warten

Code:
if (speed > 0) Msleep(500);