ich würde Sleep in eine Schleife packen:

Code:
void Msleep (
  int dauer)
{
  int z;
  for (z = 0; z < dauer; z++)
    Sleep (36);
}
Das "Problem" mit dem kurz drücken lässt sich vermeiden, wenn du einen timeout, z.B. 50ms, einstellst.
Wenn Taste gedrückt, stelle Geschwindigkeit ein, sonst Stopp.
Dadurch gibt er nicht die ganze Zeit Gas und Brems wieder...