2008. 2. 3. 22:10
시간측정 클래스 삽질예방/시간측정 클래스2008. 2. 3. 22:10
TimeStamp.h
TimeStamp.cpp
사용법
출력
그냥 최소한의 필요한 기능만 만들어놨습니다. 알고리즘 작성하다 보니 시간측정해서 비교할 일이 생기더라구요. 정확히 시간재는일 밖에는 할줄 모릅니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ2008.02.17 추가분 ㅡㅡㅡㅡㅡㅡㅡ
사용법
좀더 간편하게..
자세히 보면 알겠지만... 이전에는 milli세컨드에서 오버플로우가 발생하는 경우가 있도록 했었는데 수정하였다.(2008.02.25)
#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
#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;
}
// 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());
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());
TimeStamp a;
a.stamp();
printf("(%s sec)\n", a.diffWithNow());
좀더 간편하게..
자세히 보면 알겠지만... 이전에는 milli세컨드에서 오버플로우가 발생하는 경우가 있도록 했었는데 수정하였다.(2008.02.25)