www.pudn.com > sudoku.rar > Calculagraph.h


#pragma once 
 
class CCalculagraph 
{ 
public: 
    CCalculagraph(void) 
    { 
    } 
    ~CCalculagraph(void) 
    { 
    } 
 
protected: 
    // CPU计数 
    LARGE_INTEGER   m_liCPUCount; 
    // 时钟频率 
    double          m_dClockRate; 
    // 经过的时间 
    double          m_dElapsedTime; 
 
public: 
    // 开始计时 
    inline void Start() 
    { 
		// 获得时钟频率  
		QueryPerformanceFrequency( &m_liCPUCount );  
		m_dClockRate = (double)m_liCPUCount.QuadPart; 
        // 获得CPU计数 
		QueryPerformanceCounter( &m_liCPUCount ); 
        // 经过的时间清零 
        m_dElapsedTime = 0.0; 
    } 
    // 暂停 
    inline void Pause(bool pause = true) 
    { 
        static LONGLONG QPart1, QPart2; 
        if(pause) 
        { 
            // 获得初始计数值  
		    QPart1 = m_liCPUCount.QuadPart; 
		    // 获得终止计数值  
		    QueryPerformanceCounter( &m_liCPUCount ); 
		    QPart2 = m_liCPUCount.QuadPart; 
		    // 平均时钟频率  
		    QueryPerformanceFrequency( &m_liCPUCount );  
		    m_dClockRate = (m_dClockRate + m_liCPUCount.QuadPart) / 2.0; 
            // 计算时间 
		    m_dElapsedTime += (QPart2 - QPart1) / m_dClockRate; 
        } 
        else 
        { 
		    // 获得时钟频率  
		    QueryPerformanceFrequency( &m_liCPUCount );  
		    m_dClockRate = (double)m_liCPUCount.QuadPart; 
            // 获得CPU计数 
		    QueryPerformanceCounter( &m_liCPUCount ); 
        } 
    } 
    // 取得描述 
    inline CString Describe() 
    { 
        static CString s; 
        static long day, hour, min, sec; 
        sec = (long)m_dElapsedTime; 
        min = sec / 60; 
        hour = min / 60; 
        day = hour / 24; 
        /*s.Format("[%02ld-%02ld:%02ld'%02ld.%06.0lf\"]", 
            day, hour % 24, min % 60, sec % 60, 
            (m_dElapsedTime - sec) * 1000000.0);*/ 
        s.Format("[%ld.%06.0lf\"]", 
            sec % 60, (m_dElapsedTime - sec) * 1000000.0); 
        return s; 
    } 
};