//************************************************************************************* // //************************************************************************************* CFragment * CTraceRecorder::CreateFragment( CCodeBufferManager * p_manager ) { DAEDALUS_PROFILE( "CTraceRecorder::CreateFragment" ); DAEDALUS_ASSERT( !mTraceBuffer.empty(), "No trace ready for creation?" ); SRegisterUsageInfo register_usage; Analyse( register_usage ); CFragment * p_frament( new CFragment( p_manager, mStartTraceAddress, mExpectedExitTraceAddress, mTraceBuffer, register_usage, mBranchDetails, mNeedIndirectExitMap ) ); //DBGConsole_Msg( 0, "Inserting hot trace for [R%08x]!", mStartTraceAddress ); mTracing = false; mStartTraceAddress = 0; mTraceBuffer.clear(); mBranchDetails.clear(); mExpectedExitTraceAddress = 0; mActiveBranchIdx = INVALID_IDX; mStopTraceAfterDelaySlot = false; mNeedIndirectExitMap = false; return p_frament; }
//开始分析 bool AnalyseClassCallRelation::Analyse() { //是否获取读取clw文件 //不从clw文件获取类与资源的关系 /* if ( m_vRelationData.empty() ) { GetClwFile(); } */ //获取文件列表 vector<ClassSource> vFileList; if (! GetFileList(vFileList)) { return false; } //先分配7K的内存用来存放文件 GetMemory(40*1024); //对文件列表里文件做处理 vector<string> vClass; vector<ClassSource>::iterator iter = vFileList.begin(); FILE *fp; fp = fopen("Test.data", "w"); while (iter != vFileList.end() ) { //获取头文件信息, 得出该文件需要分析的类 vClass.clear(); string strFileName = iter->strName + ".h"; DWORD dwFileStartTime = GetTickCount(); if (! GetClassFromHeader(strFileName, vClass) ) { ++ iter ; continue; } //判断是否为clw中的类 vector<string>::iterator strIter = vClass.begin(); while (strIter != vClass.end() ) { // if (IsClwClass(*strIter)) { //是clw中的类,分析, 传入类实现文件 头文件和实现文件只有后缀区别 Analyse(iter->strName, *strIter); } ++ strIter; } ++ iter ; DWORD dwFileEndTime = GetTickCount(); fprintf(fp, "%s %d\n", strFileName.c_str(), dwFileEndTime-dwFileStartTime); } fclose(fp); return true; }
void DateSpanArray::Analyse( const YKString& dateSpan ) { //add by yp 2009.11.3 使用显示时间日历 YKSchSysParamSPtr schSys = g_Application.GetModule<YKDataBase>()->Get<YKSchSysParam>(); YKDateTime stTm = schSys->GetSchStartTime().GetDate(); stTm = YKTools::YKMin(schSys->GetShowStartTime().GetDate(), stTm); YKDateTime edTm = (schSys->GetShowEndTime() + 86400).GetDate(); edTm = YKTools::YKMax((schSys->GetSchEndTime()+ 86400).GetDate(),edTm); Analyse(dateSpan,stTm.GetDateTime(),edTm.GetDateTime()); }
//开发测试用 void AnalyseClassCallRelation::Test() { m_strProjectPath = "B:\\TestData\\ClientDemo"; //分析目录 m_strProjectName = "ClientDemo"; //项目名称 Analyse(); deque<ClassResourceRelation> qCall; QuerybyID("IDD_DLG_REOMTE_TEMPEXCEPTION", qCall); // vector<ClassSource> vFileList ; // GetFileList(vFileList); // GetClwFile(); return ; }
bool CHttpProtocol::Connect() { SOCKADDR_IN SockAddr; PREQUEST pReq = new REQUEST; if (pReq == NULL) { // 处理错误 printf("No memory for request\n"); return false; } pReq->Socket = INVALID_SOCKET; pReq->hFile = INVALID_HANDLE_VALUE; pReq->dwRecv = 0; pReq->dwSend = 0; // Accept a client socket pReq->Socket = accept(ListenSocket, (LPSOCKADDR)&SockAddr, NULL); // No longer need server socket closesocket(ListenSocket); if (pReq->Socket == INVALID_SOCKET) { printf("accept failed: %d\n", WSAGetLastError()); closesocket(ListenSocket); WSACleanup(); return false; } // 将客户端网络地址转换为用点分割的IP地址 printf("%s Connecting on socket:%d\n", inet_ntoa(SockAddr.sin_addr), pReq->Socket); char buf[DATA_BUFSIZE] = ""; bool nRet; // 接收request data if (!RecvRequest(pReq, buf, sizeof(buf))) { Disconnect(pReq); delete pReq; return false; } // 分析request信息 Analyse(pReq, buf); if(!strcmp(HTTP_STATUS_NOTIMPLEMENTED, pReq->StatuCodeReason)) { printf("Request method not implemented\n"); return false; } // 生成并返回头部 if(!SendHeader(pReq)) { printf("Send header failed\n"); return false; } // 向client传送数据 if(pReq->nMethod == METHOD_GET) SendFile(pReq); Disconnect(pReq); delete pReq; return true; }
DateSpanArray::DateSpanArray(const YKString& dateSpan) { Analyse(dateSpan); }