平台:操作系统windows98,VC++6.0中文版。
在程序中有下面一段代码,目的是测试复杂操作P花费的时间。伪代码如下:SYSTEMTIME STime;
GetLocalTime(&STime);
int nStart = STime.wMinute*60*1000 + STime.wSecond*1000 +  STime.wMilliseconds;复杂操作P;SYSTEMTIME ETime;
GetLocalTime(&ETime);
int nEnd = ETime.wMinute*60*1000 + ETime.wSecond*1000 + ETime.wMilliseconds;
int nInterval = nEnd - nStart;nInterval就是复杂操作P花费的毫秒,但是测得的数据有时候是0!有时候是50ms左右,且0出现的频率是50ms出现频率的两三倍。复杂操作P是做图像采集和压缩的,应该耗时不少,不应是0的。
请问为什么会出现0?是GetLocalTime函数和98操作系统的原因吗?请高手指教!!!

解决方案 »

  1.   

    你还是用GetTickCount试试
    DWORD stTime, curTime;
    stTime = GetTickCount();复杂操作P;curTime = GetTickCount();int nInterval = curTime - stTime; //(毫秒);
      

  2.   

    GetTickCount 比较好的,我看见许多书都是用这个方法,不过我不能保证得不到零,如果你的计算机太快,
      

  3.   

    GetTickCount 函数是什么作用啊请教啊。
      

  4.   

    CTime time = CTime::GetCurrentTime();
      

  5.   

    unsigned t=timeGetTime();//放在开始时
    t=timeGettime()-t;//结束时,t为时间
      

  6.   

    我就在用GetTickCount(),很好用,也很简单啊,精确到ms级,应该可以满足要求吧?^_^
      

  7.   

    class CHiResTimer
    {
    public:
    CHiResTimer();
    virtual ~CHiResTimer() {} bool IsTimerInstalled(void) const {return m_bTimerInstalled;} void Start(void);
    void Stop(void);
    float GetTime(void) const;
    void Reset(void);protected:
    bool m_bTimerInstalled;
    QWORD m_qwStart, m_qwStop, m_qwFreq;
    };//***********************************************
    CHiResTimer::CHiResTimer() : m_qwStart(0), m_qwStop(0)
    {
    m_bTimerInstalled = QueryPerformanceFrequency((LARGE_INTEGER*)&m_qwFreq) ? true : false;
    }//***********************************************
    void CHiResTimer::Start(void)
    {
    QueryPerformanceCounter((LARGE_INTEGER*)&m_qwStart);
    }//***********************************************
    void CHiResTimer::Stop(void)
    {
    QueryPerformanceCounter((LARGE_INTEGER*)&m_qwStop);
    }//***********************************************
    float CHiResTimer::GetTime(void) const
    {
    float fTime = 0.0;
    if(m_bTimerInstalled && m_qwFreq != 0)
    fTime = (float)((m_qwStop - m_qwStart) / (float)m_qwFreq); return fTime;
    }//***********************************************
    void CHiResTimer::Reset(void)
    {
    m_qwStart = m_qwStop = 0;
    }