달력

11

« 2024/11 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'삽질예방/시간측정 클래스'에 해당되는 글 1

  1. 2008.02.03 시간측정 클래스
2008. 2. 3. 22:10

시간측정 클래스 삽질예방/시간측정 클래스2008. 2. 3. 22:10

TimeStamp.h

#ifndef _TIME_STAMP_H_
#define _TIME_STAMP_H_

#include <sys/timeb.h>
#include <assert.h>
#include <stdio.h>

class TimeStamp {
private:
    static const int TIME_STRING_SIZE = 20;
    struct timeb timeData;
    char timeString[TIME_STRING_SIZE];

public:
    TimeStamp() {return;}
    ~TimeStamp() {return;}

    void stamp(void) { ftime(&timeData); return; }
    void subtract(TimeStamp& before);

    int getSecond(void) { return timeData.time;}
    int getMicroSecond(void) { return timeData.millitm; }
    const char* toString(void);
};

#endif

TimeStamp.cpp

#include "TimeStamp.h"

// 2008.02.25 수정본
void TimeStamp::subtract(TimeStamp& before)
{
    if (timeData.millitm >= before.timeData.millitm) {
        timeData.time -= before.timeData.time;
        timeData.millitm -= before.timeData.millitm;
    }  
    else {
        timeData.time = timeData.time - 1 - before.timeData.time;
        timeData.millitm = timeData.millitm + 1000 - before.timeData.millitm;
    }

    return;

}

const char* TimeStamp::toString(void)
{
    snprintf(timeString, TIME_STRING_SIZE, "%d.%03u", (unsigned)timeData.time,
            (unsigned)timeData.millitm);
    return timeString;
}

// 2008.02.17 추가분
// 2008.02.25 수정본
const char* TimeStamp::diffWithNow(void)
{
    ftime(&curTimeData);

    if (curTimeData.millitm >= timeData.millitm) {
        curTimeData.time -= timeData.time;
        curTimeData.millitm -= timeData.millitm;
    }
    else {
        curTimeData.time = curTimeData.time - 1 - timeData.time;
        curTimeData.millitm = curTimeData.millitm + 1000 - timeData.millitm;
    }

    snprintf(timeString, TIME_STRING_SIZE, "%d.%03u",
             (unsigned)curTimeData.time,
             (unsigned)curTimeData.millitm);
    return timeString;

}


사용법
    TimeStamp a, b;

    a.stamp();
    DoSomething();
    b.stamp();

    b.subtract(a);
    printf("%s\n", b.toString());

출력
23.123

그냥 최소한의 필요한 기능만 만들어놨습니다. 알고리즘 작성하다 보니 시간측정해서 비교할 일이 생기더라구요. 정확히 시간재는일 밖에는 할줄 모릅니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ2008.02.17 추가분 ㅡㅡㅡㅡㅡㅡㅡ
사용법
    // another usage(same behavior)
    TimeStamp a;
    a.stamp();
    printf("(%s sec)\n", a.diffWithNow());

좀더 간편하게..


자세히 보면 알겠지만... 이전에는 milli세컨드에서 오버플로우가 발생하는 경우가 있도록 했었는데 수정하였다.(2008.02.25)
:
Posted by Kwang-sung Jun