timeBeginPeriod使わないとSleepのタイマー精度も20ms単位のままだよ?(NT/Win2000)
そもそもSleepでタイミング調整しちゃいかんでしょ。

1.)