怎么统计代码的执行时间?找不到完美的解决方案

怎样统计代码的执行时间?找不到完美的解决方案。
我需要对某段代码进行计时,但是以下方法都不行:

一、获取系统时间,比如:
{
time_t timeStart = time(0);
代码
int iTime = time(0) - timeStart;
}
一旦用户在代码执行的时候,改变了系统时间,得到的iTime值肯定是错误的。

二、使用GetTickCount,比如:
{
DWORD dwStart = GetTickCount();
代码
DWORD dwTime = GetTickCount() - dwStart;
}
一旦dwStart赋值时,系统已经运行了49.71天。代码执行完后,很可能GetTickCount() - dwStart是个负数。

三、使用GetTickCount64,XP系统不支持,也不行。

请教高手,有什么完美的方法?
------解决方案--------------------
试试QueryPerformanceCounter来统计时间。

------解决方案--------------------

class CTimeMeasure
{
private:
FILETIME ftKernelTimeStart;
FILETIME ftKernelTimeEnd;
FILETIME ftUserTimeStart;
FILETIME ftUserTimeEnd;

FILETIME ftTemp;

__int64  i64KernelTimeElapsed;
__int64  i64UserTimeElapsed;
__int64  i64TotalTimeElapsed;

public:
CTimeMeasure()
{
Start();
}


void Start()
{
//获得开始的时间
GetThreadTimes(GetCurrentThread(),&ftTemp,&ftTemp,&ftKernelTimeStart,&ftUserTimeStart);
}

__int64 End()
{
//获得结束的时间
GetThreadTimes(GetCurrentThread(),&ftTemp,&ftTemp, &ftKernelTimeEnd, &ftUserTimeEnd);

//计算时间差
i64KernelTimeElapsed = FileTime2int64(ftKernelTimeEnd) - FileTime2int64(ftKernelTimeStart);
i64UserTimeElapsed   = FileTime2int64(ftUserTimeEnd)   - FileTime2int64(ftUserTimeStart);

return i64TotalTimeElapsed = i64KernelTimeElapsed + i64UserTimeElapsed;
}

private:
__int64 FileTime2int64( FILETIME& ft )
{
__int64 temp;
memcpy(&temp, &ft, sizeof(FILETIME));
return temp;
}

};



调用:
CTimeMeasure timeCount;
timeCount.Start();
//...代码段
__int64 ret = timeCount.End();