ソースコードを読み直してきました。
ほかの人が書いた、一定間隔ごとに任意の関数を実行するプログラムを調べていたのですが、
49.7日毎にタイマーがうまく動作しなくなることに気づきました。
そのバグの原因はGetTickCounter()の返り値がオーバーフローすることにあるというのは分かったのですが、
下手に差をとると、ほかの部分も変更しなくていけなくなってしまいます。
Googleなどでほかの方法を探そうとしたのですが、差をとる以外の方法は見つかりませんでした。
オーバーフローを検出したら、どういう風に処理したらいいか、
知っている人がいたら教えてほしいです。

なお、処理の流れは以下のとおりです。
(勝手に載せるとまずいので載せることはちょっと難しいです)

前処理
 tickにGetTickCount()の値 + 任意の間隔。funcに任意の関数へのポインター。
 intervalに任意の間隔を代入する
メインの処理
 1.GetTickCount()の値をnowに代入する
 2.now > tickなら、任意の関数を実行し、
   そうでなかったら、sleep()で一定時間待機した後、1へ戻る
 3.now と tick の差が1000ms以上なら、
   tickにnowとintervalの和を代入する。
   その差が1000msより少ないなら、tickにintervalを足す

ごめんなさい。ソースコードを読みなしたのですが、
いくら考えてもこういう風にしか説明ができませんでした。
分かりにくくて申し訳ないです。