|
/*+++++++++++++++++++++++++++++++++++++++++++++
File: CObject.h
Desc: 祖先类
author: zonghongbin
time: 2003.8
+++++++++++++++++++++++++++++++++++++++++++++*/
#ifndef COBJECT_H
#define COBJECT_H
//-----------------------------------------------------------------------------
// 头文件
//-----------------------------------------------------------------------------
#include <windows.h>
#include <typeinfo.h>
//-----------------------------------------------------------------------------
// 常量
//-----------------------------------------------------------------------------
INT const MAX_BUFFER = 4096;
//-----------------------------------------------------------------------------
// 宏
//-----------------------------------------------------------------------------
#define SAFE_DELETE(p) { if (p) { delete (p); (p)=NULL; } }
#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p)=NULL; } }
#define SAFE_DELOBJ(p) { if (p) { DeleteObject(p); (p)=NULL; }
//添加对象类型到m_szObjectString中
#define ADD_CLASS() \
{ \
CHAR buf[MAX_BUFFER]=""; \
wsprintf(buf,"Ojbect=%s\r\n",typeid(*this).name()); \
strcat(m_szObjectString, buf); \
}
//添加整数型属性到m_szObjectString中
#define ADD_INT(propname, propvalue) \
{ \
CHAR buf[MAX_BUFFER]=""; \
wsprintf(buf,"=%d\r\n",propvalue); \
strcat(m_szObjectString, propname); \
strcat(m_szObjectString, buf); \
}
//添加字符型属性到m_szObjectString中
#define ADD_STRING(propname, propvalue) \
{ \
CHAR buf[MAX_BUFFER]=""; \
wsprintf(buf,"=%s\r\n",propvalue); \
strcat(m_szObjectString, propname); \
strcat(m_szObjectString, buf); \
}
//添加BOOL型属性到m_szObjectString中
#define ADD_BOOL(propname, propvalue) \
{ \
CHAR buf[MAX_BUFFER]=""; \
propvalue == FALSE ? wsprintf(buf,"=FALSE \r\n") : wsprintf(buf,"=TRUE \r\n"); \
strcat(m_szObjectString, propname); \
strcat(m_szObjectString, buf); \
}
//添加对象类型的属性到m_szObjectString中(指针地址)
#define ADD_OBJECT(propname, propvalue) \
{ \
CHAR buf[MAX_BUFFER]=""; \
propvalue == NULL ? wsprintf(buf,"=NULL \r\n") : wsprintf(buf,"=%d \r\n",propvalue); \
strcat(m_szObjectString, propname); \
strcat(m_szObjectString, buf); \
}
//添加开始标记到m_szObjectString中
#define BEGIN_OF_ADD \
{ \
CHAR buf[MAX_BUFFER]=""; \
wsprintf(buf," ------------- %s Properties -------------\r\n",typeid(this).name()); \
strcat(m_szObjectString, buf); \
}
//-----------------------------------------------------------------------------
// 类定义
//-----------------------------------------------------------------------------
class CObject;
class CObject
{
protected:
CHAR m_szObjectString[MAX_BUFFER]; //ToString函数使用的字符缓冲区
public:
//-----------------------------------------------------------------------------
// 构造函数与析构函数
//-----------------------------------------------------------------------------
CObject();
virtual ~CObject();
//-----------------------------------------------------------------------------
// 重载函数
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 其他函数
//-----------------------------------------------------------------------------
virtual CHAR *ToString();
};
#endif //COBJECT_H
/*+++++++++++++++++++++++++++++++++++++++++++++
文件: CObject.cpp
描述:
作者: zonghongbin
时间: 2003.8
+++++++++++++++++++++++++++++++++++++++++++++*/
#include "CObject.h"
/*========================================================================
名称: 构造函数
描述: 初始化成员变量
返回值:无
========================================================================*/
CObject::CObject()
{
strcpy(m_szObjectString,"");
}
/*========================================================================
名称: 析构函数
描述:
返回值:无
========================================================================*/
CObject::~CObject()
{
}
/*========================================================================
名称: ToString
描述: 初始化成员变量
返回值:无
========================================================================*/
CHAR *CObject::ToString()
{
strcpy(m_szObjectString,"");
ADD_CLASS();
return m_szObjectString;
}
/*+++++++++++++++++++++++++++++++++++++++++++++
File: CUtil.h
Desc:
author: zonghongbin
time: 2003.8
+++++++++++++++++++++++++++++++++++++++++++++*/
#ifndef CUTIL_H
#define CUTIL_H
//-----------------------------------------------------------------------------
// 头文件
//-----------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <typeinfo.h>
#include "ddutil.h"
#include "CObject.h"
//-----------------------------------------------------------------------------
// 常量
//-----------------------------------------------------------------------------
INT const SCREEN_WIDTH = 640;
INT const SCREEN_HEIGHT = 480;
//-----------------------------------------------------------------------------
// 宏
//-----------------------------------------------------------------------------
//以下为wsprintf版日志处理宏,注意有1024字节限制
#define LOG(x) { CUtil: og(x, "log.txt", __FILE__, __LINE__); }
#define LOG1(s,a) { CHAR szLogBuffer[MAX_BUFFER]; wsprintf(szLogBuffer,s,a); LOG(szLogBuffer); }
#define LOG2(s,a,b) { CHAR szLogBuffer[MAX_BUFFER]; wsprintf(szLogBuffer,s,a,b); LOG(szLogBuffer); }
#define LOG3(s,a,b,c) { CHAR szLogBuffer[MAX_BUFFER]; wsprintf(szLogBuffer,s,a,b,c); LOG(szLogBuffer); }
#define LOG4(s,a,b,c,d) { CHAR szLogBuffer[MAX_BUFFER]; wsprintf(szLogBuffer,s,a,b,c,d); LOG(szLogBuffer); }
//以下为wsprintf版throw处理宏,注意有1024字节限制
#define THROW(x) { LOG(x); throw x; }
#define THROW1(s,a) { LOG1(s,a); throw s; }
#define THROW2(s,a,b) { LOG2(s,a,b); throw s; }
#define THROW3(s,a,b,c) { LOG3(s,a,b,c); throw s; }
#define THROW4(s,a,b,c,d) { LOG4(s,a,b,c,d); throw s; }
#define TIMELOG1 LARGE_INTEGER nLogStartTime,nLogEndTime; QueryPerformanceCounter(&nLogStartTime);
#define TIMELOG2 QueryPerformanceCounter(&nLogEndTime); LOG2("耗时 %d CPU时间单位 计 %d 毫秒",nLogEndTime.LowPart - nLogStartTime.LowPart, CUtil::TimeUp(nLogStartTime));
//-----------------------------------------------------------------------------
// 类定义
//-----------------------------------------------------------------------------
class CUtil;
class CUtil : public CObject
{
protected:
public:
//-----------------------------------------------------------------------------
// 构造函数与析构函数
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 重载函数
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// 其他函数
//-----------------------------------------------------------------------------
static INT TimeUp(LARGE_INTEGER startTime);
static VOID CUtil::Log( CHAR *szBuffer, //测试数据
CHAR *szFile, //指定的文件
CHAR *szSrcFile, //源程序文件,使用__FILE__
INT nLine //源程序行,使用__LINE__
);
static struct tm *NowDateTime();
};
#endif //CUTIL_H
/*+++++++++++++++++++++++++++++++++++++++++++++
File: CUtil.cpp
Desc:
author: zonghongbin
time: 2003.8
+++++++++++++++++++++++++++++++++++++++++++++*/
#include "CUtil.h"
/*========================================================================
名称: TimeUp
描述: 判断给定的时间段是否耗完
返回值:已过去的时间毫秒数
========================================================================*/
INT CUtil::TimeUp(LARGE_INTEGER startTime //设定的开始时间
)
{
LARGE_INTEGER endTime;
LARGE_INTEGER passTime; //结果
LARGE_INTEGER Frequency;
LARGE_INTEGER nCountPerMillSecond;
//取一秒的记数
QueryPerformanceFrequency (&Frequency);
nCountPerMillSecond.QuadPart = Frequency.QuadPart/1000;
QueryPerformanceCounter( &endTime );
passTime.QuadPart = (endTime.QuadPart - startTime.QuadPart)/nCountPerMillSecond.QuadPart;
return passTime.LowPart;
}
/*========================================================================
函数名: Log
功能: 把测试数据写入文件
返回值: 无
========================================================================*/
VOID CUtil::Log( CHAR *szBuffer, //测试数据
CHAR *szFile, //指定的文件
CHAR *szSrcFile, //源程序文件,使用__FILE__
INT nLine //源程序行,使用__LINE__
)
{
struct tm *newtime;
CHAR szLog[MAX_BUFFER];
CHAR szTitle[MAX_BUFFER];
newtime=NowDateTime();
//wsprintf最多可以处理1024bytes
wsprintf(szTitle,"\r\n[%04d-%02d-%02d %02d:%02d:%02d]\r\nFile=%s\r\nLine=%d\r\n",
newtime->tm_year,newtime->tm_mon,newtime->tm_mday,newtime->tm_hour,newtime->tm_min,newtime->tm_sec,
szSrcFile,nLine);
strcpy(szLog,"\r\n####################################################");
strcat(szLog,szTitle);
strcat(szLog,szBuffer);
strcat(szLog,"\r\n");
//写日志
FILE *f = NULL;
f = fopen(szFile,"a");
if( f == NULL)
{
throw "打开文件失败。";
return;
}
CHAR *p;
p = szLog;
while( fputc(*(p++),f) != 0 ) {;}
fclose(f);
}
/*========================================================================
函数名: NowDateTime
功能: 获取本机当前日期和时间
返回值: 无
========================================================================*/
struct tm *CUtil::NowDateTime()
{
struct tm *newtime;
time_t long_time;
INT year=0,
mon=0;
/*取当前时间并显示*/
time(&long_time);
newtime = localtime(&long_time);
year = newtime->tm_year + 1900;
mon = newtime->tm_mon + 1;
newtime->tm_year = year;
newtime->tm_mon = mon;
return newtime;
}
|
|