LARGE_INTEGER start, end, frequency;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// .. do stuff
QueryPerformanceCounter(&end);
double elapsedTime = static_cast<double>(end.QuadPart - start.QuadPart) / static_cast<double>(frequency.QuadPart);
That doesn't use the CPU's time stamp. The problem with using the CPU time stamp is that it'll be different depending on the CPU the thread is running on (which is a problem on dual+ core systems). Also there's not easy way of knowing the speed at which the CPU time stamp will increment at, as with things like OCing, Cool 'n Quiet, ect... can dynamically change the CPU speed.
Your best bet is to use the high performance timers in windows (above) and pray (and perhaps add a bit of code) that it doesn't run backwards. If you really want a robust timer u integrate it with timegettime(). Funny thing is, as simple as it may seem, a robust, high precision timer doesn't exist on PCs.