WM_TIMER msgs are THE lowest priority in the OS msg queue, after WM_PAINT.
Getting a consistent resolution of +/- 2 msec is impossible, getting +/- 50 msec is hard in any system under load.
GetTickCount is a low performance timer using the system timer, which has a minimum resolution of ~10 msec (closer to 15 msec on the sytems I use).
I found it very difficult to get sub to one millisec timers on MS OS's (except CE) without using a filter driver.
QueryPerformanceCounter() is much better resolution, but may have issues on threads running on differing cores of a multi core CPU (and if not implemented on the system hardware will default to call GetTickCount()).