UsingomniORBinterceptorstorecordtimecostedinCORBAcalls

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

struct CallInfo

{

std::string opname;

DWORD time;

};

std::map<DWORD, std::stack<CallInfo> > calls;

static CORBA::Boolean sendReqFunc(omni::omniInterceptors::clientSendRequest_T::info_T& info)

{

if(!info.response_expected){

CallInfo c;

c.opname = info.opname;

c.time = ::GetTickCount();

calls[GetCurrentThreadId()].push(c);

}

return TRUE;

}

static CORBA::Boolean receiveRepFunc(omni::omniInterceptors::clientReceiveReply_T::info_T& info)

{

DWORD t = ::GetTickCount();

if(!calls[GetCurrentThreadId()].empty()){

const CallInfo& c = calls[GetCurrentThreadId()].top();

TRACE("==== %s , %d ms ====\n", c.opname.c_str(), t - c.time);

calls[GetCurrentThreadId()].pop();

}

return TRUE;

}

And here is how to register the inteceptors after the ORB_init call:

omni::omniInterceptors* interceptors = omniORB::getInterceptors();

interceptors->clientSendRequest.add(sendReqFunc);

interceptors->clientReceiveReply.add(receiveRepFunc);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航