关于仿制的一个ACE跟踪类

系统 1701 0

ACE有一个跟踪类ACE_Trace,本文为了弄清这个跟踪类,并增强一些功能,自己仿制一个Trace跟踪类,这个类完全模仿ACE_Trace类,只是在开始增加了一个标题。这个标题你可以在#define时进行定制。

以下为头文件:

//Trace.h


// Trace.h:
//

#pragma once

#define ACE_NDEBUG0
#define ACE_NTRACE0


#include
" ace/log_msg.h "
#include
" ace/Object_Manager.h "
class Trace
... {
public :
Trace(
const ACE_TCHAR * prefix,
const ACE_TCHAR * name,
int line,
const ACE_TCHAR * file)
... {
this -> prefix_ = prefix;
this -> name_ = name;
this -> line_ = line;
this -> file_ = file;

ACE_Log_Msg
* lm = ACE_LOG_MSG;
if (lm -> tracing_enabled()
&& lm -> trace_active() == 0 )
... {
lm
-> trace_active( 1 );
ACE_DEBUG((LM_TRACE,
ACE_TEXT(
" %s%*s(%t)calling%sinfile'%s' " )
ACE_TEXT(
" online%d " ),
this -> prefix_,
Trace::nesting_indent_
* lm -> inc(),
ACE_TEXT(
"" ),
this -> name_,
this -> file_,
this -> line_));
lm
-> trace_active( 0 );
}

}


void setLine( int line)
... {
this -> line_ = line;
}


~ Trace( void )
... {
ACE_Log_Msg
* lm = ACE_LOG_MSG;
if (lm -> tracing_enabled()
&& lm -> trace_active() == 0 )
... {
lm
-> trace_active( 1 );
ACE_DEBUG
((LM_TRACE,
ACE_TEXT(
" %s%*s(%t)leaving%sinfile'%s' " )
ACE_TEXT(
" online%d " ),
this -> prefix_,
Trace::nesting_indent_
* lm -> dec(),
ACE_TEXT(
"" ),
this -> name_,
this -> file_,
this -> line_));
lm
-> trace_active( 0 );
}

}


private :
enum ... {nesting_indent_ = 3 } ;
const ACE_TCHAR * prefix_;
const ACE_TCHAR * name_;
const ACE_TCHAR * file_;
int line_;
}
;


#define TRACE_PREFIXACE_TEXT("TRACE")

#if (ACE_NTRACE==1)
#defineTRACE(X)
#defineTRACE_RETURN(V)
#defineTRACE_RETURN_VOID()
#else
#defineTRACE(X)
Trace____(TRACE_PREFIX,
ACE_TEXT(X),
__LINE__,
ACE_TEXT(__FILE__))
#defineTRACE_RETURN(V)
do ... {____.setLine(__LINE__); return V;} while ( 0 )

#defineTRACE_RETURN_VOID()
do ... {____.setLine(__LINE__);} while ( 0 )
#endif

下面为测试程序:

// testTrace.cpp:Definestheentrypointfortheconsoleapplication.
//

#include
" stdafx.h "

#include
" trace.h "


int test2()
... {
TRACE(ACE_TEXT(
" test2 " ));
return 0 ;
}


int test()
... {
TRACE(ACE_TEXT(
" Test " ));
test2();
return 0 ;
}


int _tmain( int argc,_TCHAR * argv[])
... {
TRACE(ACE_TEXT(
" main " ));

test();


return 0 ;
}


以上程序皆是在vs2005上测试通过。

关于仿制的一个ACE跟踪类


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论