А FlushInstructionCache под 9x есть, но ничего не делает. IMHO, этот код писался не для 9x все-таки.
А касаемо способа работы с таймерами, есть такая идея. Во-первых, пусть это каждый решает для себя, в меру своей крутости, понтов и т.п. А во-вторых, чтобы это можно было реализовать, делается следующее: из CTimerHost выдирается весь специфический код (то есть большая часть SetTimer, большая часть KillTimer, m_hWnd и тот самый PostMessage, который, видимо, не понравился Анониму) и помещается в CReceiver. Дальше на совести использующего лежит написание такого CReceiver, который ему нужен (можно сделать иерархию с интерфейсом, скажем, IReceiver, в корне). А CTimerHost переделывается в шаблон, параметром в котором выступает этот самый CReceiver. Дальше там, где стояли определения переменных CTimerHost, мы ставим определения CTimerHost<CMyReceiver> и радуемся жизни.