DWORD static waittime=0;
static DWORD oldtime=0;
float wt=1000.0f/FPS;

wt=(cnt%60+1)*wt;//待つべき時間

//分解能の精度を変更(制度をあげる)
timeBeginPeriod(1);

waittime+=timeGetTime()-oldtime;

if(waittime<wt)
Sleep(wt-waittime);

oldtime = timeGetTime();

if(waittime<wt){
waittime=wt;
}

//分解能の設定を戻す
timeEndPeriod(1);
++cnt;
}

こんな感じなんですがダメですかね?
FPSには60.0fが入っています。