当前位置:操作系统 > Unix/Linux >>

UsingomniORBinterceptorstorecordtimecostedinCORBAcalls

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);
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,