|
GetTickCount를 쓰실땐.. 49일 주기로 오버플로우가 생기는걸 주의하셔야합니다.
GetTickCount말고 그냥 일반 날짜관련 클래스나 함수들 쓰세요.
그냥 now() 한방 때려주시는게 좋을 듯 하군요.
이현진 님이 쓰신 글 :
: 에스프레소 님이 쓰신 글 :
: : 안녕하세요...
: :
: : 항상 C++ 빌더 포럼에서 많은 도움을 받고 있어서 감사히 생각하고 있습니다.
: :
: : 궁금한 사항이 있어 질문을 드립니다.
: :
: : 프로그램이 처음에 실행되고 나서 끝날때 까지 실행된 시간을 구하고 싶습니다.
: :
: : 어떤 방법이 있는지 고수님들의 의견을 기다리겠습니다.
: :
: : 그럼 즐푸 하세요 ~~
:
: 초간단 방법으로는 GetTickCount() WinAPI 함수를 이용해서 프로그램 시작시에 tick 값을 얻어오고,
: 프로그램 종료시에 다시 tick 값을 얻어와서 그 차이값으로 프로그램이 수행된 millisecond 값을 계산할 수 있습니다.
:
: 좀더 정밀한 수행 시간을 계산하려면, QueryPerformanceFrequency(), QueryPerformanceCounter() WinAPI 함수를 이용하시면 됩니다.
:
: //---------------------------------------------------------------------------
: //! 경과 시간 처리 클래스
: class DLL_API CTIMER
: {
: private:
: void initialize();
:
: protected:
: LARGE_INTEGER tick_count;
: LARGE_INTEGER last_time;
:
: public:
: CTIMER();
: virtual ~CTIMER();
:
: //! 경과 시간 초기화
: /*! 경과된 시간을 0으로 초기화 */
: void reset();
: //! 경과 시간 반환
: /*! 마지막으로 초기화한 이후 경과된 시간 반환
: * \return 초(second) 단위 시간
: */
: double elapsed();
:
: //! 경과 시간 확인
: /*! 주어진 시간이 경과 되었는지 확인
: * \param _time: 경과 확인 시간 (sec)
: * \return true: 경과됨, false: 경과되지 않음
: */
: bool is_elapsed(const double _time);
: };
: //---------------------------------------------------------------------------
:
: CTIMER::CTIMER()
: {
: initialize();
: }
: //---------------------------------------------------------------------------
:
: CTIMER::~CTIMER()
: {
: }
: //---------------------------------------------------------------------------
:
: void CTIMER::initialize()
: {
: ZeroMemory(&tick_count, sizeof(LARGE_INTEGER));
: QueryPerformanceFrequency(&tick_count);
: ZeroMemory(&last_time, sizeof(LARGE_INTEGER));
: reset();
: }
: //---------------------------------------------------------------------------
:
: void CTIMER::reset()
: {
: QueryPerformanceCounter(&last_time);
: }
: //---------------------------------------------------------------------------
:
: double CTIMER::elapsed()
: {
: LARGE_INTEGER currentTime;
: QueryPerformanceCounter(¤tTime);
:
: return ( ((double)currentTime.QuadPart - (double)last_time.QuadPart) /
: (double)tick_count.QuadPart );
: }
: //---------------------------------------------------------------------------
:
: bool CTIMER::is_elapsed(const double _time)
: {
: return (elapsed()>_time) ? true : false;
: }
: //---------------------------------------------------------------------------
|