c# 코드 문서화를 위한 SandCastle 예제입니다.
설치 및 설명은 이전 포스트를 참조하세요.
http://kimstar.pe.kr/blog/96
using System;
using System.Runtime.InteropServices;
namespace Inticube.Lib.Util
{
/// <summary>
/// 시간을 측정하는 기능을 구현한 class.
/// </summary>
/// <author>KimStar</author>
/// <remarks>
/// <b>2008.09.01</b> 변경이력을 기술한다.<br/>
/// <b>2008.09.02</b> 홍길동이 수정했음
/// </remarks>
public class StopWatch
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi)]
private static extern bool QueryPerformanceFrequency(out long frequency);
[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi)]
private static extern bool QueryPerformanceCounter(out long counter);
/// <summary>
/// GetElapsedTime() 함수가 반환하는 시간의 단위를 지정할 때 쓰이는 enum.
/// </summary>
public enum TIME_UNIT
{
/// <summary>초 단위.</summary>
SECOND,
/// <summary>밀리초 단위. (1/1000초)</summary>
MILLISECOND,
/// <summary>마이크로초 단위. (1/1000000초)</summary>
MICROSECOND,
/// <summary>나노초 단위. (1/1000000000초)</summary>
NANOSECOND
}
private long frequency; // high-resolution counter의 frequency를 저장하는 변수.
private long startCount; // 시간을 재기 시작한 순간의 counter 값.
/// <summary>
/// StopWatch의 생성자
/// </summary>
/// <remarks>
/// 2008.09.02 Kimstar 수정했음
/// </remarks>
public StopWatch()
{
QueryPerformanceFrequency(out frequency);
Start();
}
/// <summary>
/// 시간을 재기 시작하는 function.
/// </summary>
/// <remarks>
/// 2008.09.02 Kimstar 수정했음
/// </remarks>
public void Start()
{
QueryPerformanceCounter(out startCount);
}
/// <summary>
/// Start() 함수를 호출한 시각부터 흐른 시간을 반환해주는 function.
/// </summary>
/// <param name="timeUnit">반환할 시간의 단위.</param>
/// <param name="resetTimer">진행된 시간을 반환함과 동시에 타임를 리셋할 것인가를 나타낸다. 만약 타이머를 리셋하면
/// 다음번 이 함수를 호출할 때에는 이 함수를 호출한 시점부터 진행된 시간을 반환하게 된다.</param>
/// <returns>진행된 시간을 반환한다.</returns>
/// <exception cref="System.Exception">오류발생 예외를 발생합니다.</exception>
///
/// <example> 아래 예제는 흐른 시간을 구하는 예제이다.
/// <code>
/// private StopWatch sw = new StopWatch();
/// sw.Start();
/// global::System.Windows.Forms.MessageBox.Show("Elapsed Time : " + sw.GetElapsedTime(StopWatch.TIME_UNIT.MILLISECOND, true).ToString() + "milli second");
/// </code>
/// </example>
///
/// <remarks>
/// 2009.01.01 Kimstar 최초 작성<br/>
/// 2008.09.02 Kimstar 수정. 뭐뭐뭐를 수정했음.
/// </remarks>
public long GetElapsedTime(TIME_UNIT timeUnit, bool resetTimer)
{
try
{
// 현재 카운터 값 구하기.
long currentCount;
QueryPerformanceCounter(out currentCount);
// 진행된 시간을 초 단위로 구하기.
double elapsedTime = (currentCount - startCount) / (double)frequency;
// 타이머를 리셋하도록 한 경우.
if (resetTimer)
{
startCount = currentCount;
}
// 진행된 시간 반환.
switch (timeUnit)
{
case TIME_UNIT.SECOND: return (long)(elapsedTime * 1);
case TIME_UNIT.MILLISECOND: return (long)(elapsedTime * 1000);
case TIME_UNIT.MICROSECOND: return (long)(elapsedTime * 1000000);
case TIME_UNIT.NANOSECOND: return (long)(elapsedTime * 1000000000);
}
return 0;
}
catch (Exception ex)
{
throw new System.Exception(ex.Message);
}
}
}
}









