>>327
タイマーイベントで処理して、またタイマーイベントで処理・・・
って繰り返せばそりゃ誤差は蓄積する。

正しいのはスレッドをつくって常に時計を監視させること。
その間Sleep(1)で1ms程度のウエイトでループさせる。
このループは1msを正確に寝るためにやるんじゃなくて、ビジーループにならないようにするためにやる。
じゃないとCPUが100%に張り付いてしまうからね。
そしてそのループで毎回時計をみる。
時間になってたらならす。そしてまたループの先頭にもどる。
これでよい。

参照すべき時計だが、>>234,236の実験にあるように確かに1ms以下の誤差がある
(どこから10msくらい遅れてるって話がでてくるんだ?)
この1msの誤差は上記の方法でやれば蓄積しない。
音を鳴らすタイミングが、本来のタイミングから1ms程度前後するだけ。
そして、人間には1ms以下の誤差なんかまったく分からない。

リンク先の話は、多分映像が30フレームなんだろう。その場合最大で33ms遅れるはず。
これの平均が22msなんじゃないのかな。
音声の場合はもっと1フレームが短い時間なので、よりズレが小さいという話だろう。