첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170
using System;
using System.Runtime.InteropServices;
using System.Threading;

/// <summary>
/// 스톱워치 관리자
/// </summary>
public class StopWatchManager
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Import
    ////////////////////////////////////////////////////////////////////////////////////////// Static
    //////////////////////////////////////////////////////////////////////////////// Public

    #region 성능 계수 조사하기 - QueryPerformanceCounter(performanceCount)

    /// <summary>
    /// 성능 계수 조사하기
    /// </summary>
    /// <param name="performanceCount">성능 계수</param>
    /// <returns>처리 결과</returns>
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern int QueryPerformanceCounter(ref long performanceCount);

    #endregion

    #region 성능 주기 조사하기 - QueryPerformanceFrequency(performanceFrequency)

    /// <summary>
    /// 성능 주기 조사하기
    /// </summary>
    /// <param name="performanceFrequency">성능 주기</param>
    /// <returns>처리 결과</returns>
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern int QueryPerformanceFrequency(ref long performanceFrequency);

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region Field

    /// <summary>
    /// 시작 틱
    /// </summary>
    private long startTick;

    /// <summary>
    /// 종료 틱
    /// </summary>
    private long endTick;

    /// <summary>
    /// 주기
    /// </summary>
    private long frequency;

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 주기 - Frequency

    /// <summary>
    /// 주기
    /// </summary>
    public long Frequency
    {
        get
        {
            return this.frequency;
        }
    }

    #endregion

    #region 경과 초수 - ElapsedSeconds

    /// <summary>
    /// 경과 초수
    /// </summary>
    public double ElapsedSeconds
    {
        get
        {
            if(this.frequency == 0L)
            {
                return 0d;
            }

            return ((double)(this.endTick - this.startTick)) / ((double)this.frequency);
        }
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - StopWatchManager()

    /// <summary>
    /// 생성자
    /// </summary>
    public StopWatchManager()
    {
        this.startTick = 0L;
        this.endTick   = 0L;
        this.frequency = 0L;

        QueryPerformanceFrequency(ref this.frequency);
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 시작하기 - Start()

    /// <summary>
    /// 시작하기
    /// </summary>
    public void Start()
    {
        Thread.Sleep(0);

        QueryPerformanceCounter(ref this.startTick);
    }

    #endregion

    #region 종료하기 - Stop()

    /// <summary>
    /// 종료하기
    /// </summary>
    public void Stop()
    {
        QueryPerformanceCounter(ref this.endTick);
    }

    #endregion
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요