亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qprofile.cpp

?? 編譯與調試技巧源代碼:qprofile_src
?? CPP
字號:
/*
This file is distributed "as is", e.g. there are no warranties 
and obligations and you could use it in your applications on your
own risk. Although your comments and questions are welcome.

Source:			QProfile.cpp
Author:			(c) Dan Kozub, 1999
URL   :			http://members.tripod.com/~DanKozub
Email :			Dan_Kozub@usa.net, Dan_Kozub@pemail.net
Last Modified:	Feb 7,1999
Version:		1.3
*/

#include "stdafx.h"
#include "QProfile.h"
#define QPROFILE_MIN_MAX
//comment above line to exclude min-max info collection
//this can speed up profiling a bit 

// Initializing static variables
QProfile *			QProfile::ChainHead=NULL;
int					QProfile::MaxFileNameLen;
LONGLONG      		QProfile::ProgramTime;
LONGLONG      		QProfile::Frequency;
char				QProfile::StrBuffer[QPROFILE_NAMELEN];
bool				QProfile::StopProfiling =false;

LPCSTR				QProfile::OutFile="QProfile.txt";
int					QProfile::OutFileMaxSize = 20000; 
						// after 20K output file will be truncated
int					QProfile::OutputFilter = QProfile_OutputFilters_Time; 
						// by default time in ms is excluded from report
QProfile_Sorting	QProfile::SortBy = QProfile_Sort_PureTime;
int					QProfile::Output=
						QProfile_Out_All|QProfile_Out_File_Append|
						QProfile_Out_Add_Source;
						// write output to all destinations

// This is the main object to measure total time
QProfile			QProfile_Program("Total time");



REM("============QProfile======================")
REM("============QProfile======================")
REM("============QProfile======================")



REM("============QProfile======================")
	QProfile::QProfile(LPCSTR name,bool delete_after_report,
					 LPCSTR file_name, int line_num){
			if (name) ::lstrcpyn(Name,name,QPROFILE_NAMELEN);
			else Name[0]=0;
			DeleteAfterReport = delete_after_report;
			Elapsed = 0;
			LastStart = 0;
			TimeInChildren = 0;
			Counter = 0;
			Running = 0;
			Next = ChainHead; 
			ChainHead = this;
			AutoStarterActive = 0;
			if (!QProfile_Program.IsRunning()) 	QProfile_Program.Start();
			FirstParentFunction = NULL;
			ReportPrinted = false;
			#ifdef QPROFILE_MIN_MAX
				MaxTime=0;
				MinTime=0x7FFFFFFFFFFFFFFF;
			#endif
			FileName=file_name;
			if (lstrlen(file_name) > MaxFileNameLen)  MaxFileNameLen = lstrlen(file_name);
			LineNumber=line_num;
			};


REM("============Reset=========================")
void		QProfile::Reset(){
Elapsed = 0;
LastStart = 0;
Counter = 0;
Running = 0;
#ifdef QPROFILE_MIN_MAX
	MaxTime=0;
	MinTime=0x7FFFFFFFFFFFFFFF;
#endif
};

REM("============PrintSummary==================")
void	QProfile::PrintSummary(){
static bool SummaryAlreadyPrinted = false;
if (SummaryAlreadyPrinted) return; 
	else SummaryAlreadyPrinted = true;
//Summary should be printed only once
StopProfiling=true;
QProfile_Program.Stop(); 
GET_TIMER_FREQ(Frequency);
ProgramTime = QProfile_Program.Elapsed;
char buff[255];
Out("\n----------------- Profiling  results -----------------\n");
SYSTEMTIME time;GetLocalTime(&time);
sprintf(buff,"Date: %02d.%02d.%02d, Time: %02d:%02d.%02d\n",
		time.wDay,time.wMonth,time.wYear,time.wHour,time.wMinute,time.wSecond);
Out(buff);
while(1)
{
	QProfile * max = ChainHead;
	QProfile * cur = ChainHead;
	while(cur){
		if ((*max>*cur)==false) 
								max=cur;
		cur=cur->Next;}
	if (max->ReportPrinted) break;
	max->PrintReport();
} 
Out("\n------------------------------------------------------\n",true,"");
//let's go through all objects once more to delete some
QProfile * cur = ChainHead;
while(cur){
		QProfile * next = cur->Next;
		if (cur->DeleteAfterReport) delete cur;
		cur = next;	}
return;};

REM("============PrintReport===================")
void	QProfile::PrintReport(int level){
ASSERT(TimeInChildren>=0);
if (ReportPrinted) return; ReportPrinted = true;
char buff[255];
char buff2[255];
double elapsed =(double)Elapsed/Frequency*1000;
double share = (double)Elapsed/ProgramTime*100;
double no_children =(double)(Elapsed-TimeInChildren)/Frequency*1000;
double no_children_share = (double)(Elapsed-TimeInChildren)/ProgramTime*100;
static bool first_line = true;
if (first_line){
		Out("------------------------------------------------------\n",false,"");
		Out("|-Child|Total ",false,"");
	if ((OutputFilter&QProfile_OutputFilters_Time)==0)	
		Out("|Time (ms) ");
	if ((OutputFilter&QProfile_OutputFilters_Count)==0)	
		Out("|  Hits  ");
	if ((OutputFilter&QProfile_OutputFilters_TimePerCall)==0)	
		Out("|Time/call ");
#ifdef QPROFILE_MIN_MAX
		Out("|   MIN   |   MAX   ");
#endif
		Out("| Function    \n");
		Out("------------------------------------------------------\n",false,"");}
if (no_children_share == share){
	if (SortBy == QProfile_Sort_Time)
		sprintf(buff,"|      |%6.2lf",no_children_share);
	else
		sprintf(buff,"|%6.2lf|      ",no_children_share);
}else
	sprintf(buff,"|%6.2lf|%6.2lf",no_children_share,share);

if (FileName)
	sprintf(buff2,"%-*.*s(%3d) :",MaxFileNameLen,MaxFileNameLen,FileName,(WORD)LineNumber);
else 
	sprintf(buff2,"");
Out(buff,false,buff2);
if ((OutputFilter&QProfile_OutputFilters_Time)==0){
	sprintf(buff,"|%10.2lf",elapsed);
	Out(buff);}
if ((OutputFilter&QProfile_OutputFilters_Count)==0){
	sprintf(buff,"|%8I64d",Counter);
	Out(buff);}
if ((OutputFilter&QProfile_OutputFilters_TimePerCall)==0){
	sprintf(buff,"|%10.3lf",elapsed/Counter);
	Out(buff);}
Out("|");
#ifdef QPROFILE_MIN_MAX
	if (MinTime==0x7FFFFFFFFFFFFFFF) MinTime = 0;
	sprintf(buff,"%9.3lf|%9.3lf|",
		(double)MinTime/Frequency*1000,
		(double)MaxTime/Frequency*1000);
	Out(buff);
#endif
for(int l=0;l<level;l++) Out("  ");
Out(Name);
if ((DWORD)FirstParentFunction>1){
	sprintf(buff,"(%3.1lf%%)",(double)Elapsed/FirstParentFunction->Elapsed*100);
	Out(buff);}

Out("\n");
if (Output&QProfile_Out_DrawBar){
	double bar_share = no_children_share;
	if (SortBy == QProfile_Sort_Time) bar_share = share;
	Out(PrintBar(bar_share,100,80),false,"");
	Out("\n");}
first_line = false;
if (SortBy == QProfile_Sort_Time){
	QProfile * child = FindNextChild(NULL);
	while(child){
		child->PrintReport(level +1);
		child = FindNextChild(child);}
}
return;};

REM("============PrintBar======================")
char *		QProfile::PrintBar(double val,double max,int length){
static char buff[256];
if (length > 255) length =255;
double to_print = (double)length*val/max;
int to_print_int = (int)to_print;
for(int i=0;i<length;i++){
	while(true){
	if (i==to_print_int){ buff[i]='#'; break;}
	if (i==to_print_int*10){ buff[i]='#';break;}
	if (i<to_print_int){ buff[i]='>'; break;}
	if (i<to_print_int*10){ buff[i]='=';break;}
	buff[i]='.';
	break;}
}
buff[i]=0;
return buff;};

REM("============Out===========================")
bool		QProfile::Out(LPCSTR string,bool last,LPCSTR debug_only){
#ifdef _RPT0
if (Output&QProfile_Out_DebugWindow){
				if (debug_only && (Output&QProfile_Out_Add_Source)){
						if (*debug_only==0) {
								for(int space=0;space<MaxFileNameLen+7;space++)
											_RPT0(_CRT_WARN," ");}
						else 
								_RPT0(_CRT_WARN,debug_only);
						}
				_RPT0(_CRT_WARN,string);
				if (last) _RPT0(_CRT_WARN,"\n");}
#endif
if (Output&QProfile_Out_Consol){
				printf(string);
				if (last) printf("\n");}

if (Output&QProfile_Out_File==0){ return true;}
static HANDLE Handle = NULL;
if (Handle==NULL){
	Handle =::CreateFile(OutFile,GENERIC_WRITE,0,0L,OPEN_ALWAYS,0,0);
	int sz= ::GetFileSize(Handle,NULL);
	if ((Output&QProfile_Out_File_Append) && sz < OutFileMaxSize) ::SetFilePointer(Handle,0,NULL,FILE_END);
	else ::SetEndOfFile(Handle); 
	};
DWORD written = 0;
BOOL ok=::WriteFile(Handle,string,lstrlen(string),&written,NULL);
if (last) ::CloseHandle(Handle);
return true;};

REM("============FindNextChild=================")
QProfile *		QProfile::FindNextChild(QProfile * find_after){
QProfile * cur = ChainHead;
if (find_after) cur =  find_after->Next;
while(cur){
	if (cur->FirstParentFunction == this) return cur;
	cur=cur->Next;}
return NULL;};


REM("============operator>=====================")
bool		QProfile::operator>(QProfile& to_compare){
if (to_compare.ReportPrinted) return true;
if (ReportPrinted) return false;
if (SortBy == QProfile_Sort_Time){
	if (to_compare.FirstParentFunction!=FirstParentFunction)
							return (DWORD)FirstParentFunction<=1;}
switch(SortBy){
	case QProfile_Sort_Time:
		if (Elapsed > to_compare.Elapsed) return true;
		else return false;
	case QProfile_Sort_PureTime:
		if (Elapsed-TimeInChildren > 
			to_compare.Elapsed - to_compare.TimeInChildren) return true;
		else return false;
	case QProfile_Sort_Count:
		if (Counter > to_compare.Counter) return true;
		else return false;
	case QProfile_Sort_TimePerCall:
		if ((double)Elapsed/Counter > 
				(double)to_compare.Elapsed/to_compare.Counter ) return true;
		else return false;
	default: return false;}
return false;};





REM("============QProfileStarter===============")
REM("============QProfileStarter===============")
REM("============QProfileStarter===============")

_declspec(thread) QProfileStarter * QProfileStarter::LastActive=NULL;
REM("============RecursiveCallFrom=============")
QProfileStarter *	QProfileStarter::RecursiveCallFrom(){
QProfileStarter * cur = Parent;
while(cur){
		if (cur->Profile==Profile) return cur;
		cur=cur->Parent;}
return NULL;}

REM("============QProfileStarter===============")
QProfileStarter::~QProfileStarter(){
		if (QProfile::StopProfiling) return;
		LONGLONG       now;
		GET_TIMER_VALUE(now);
		LONGLONG       elapsed = now-StartTime;
		LastActive = Parent;
		bool maybe_recursive = (--Profile->AutoStarterActive) > 0;
		#ifdef QPROFILE_MIN_MAX
			if (elapsed>Profile->MaxTime) 
						Profile->MaxTime=elapsed;
			if (elapsed<Profile->MinTime) 
						Profile->MinTime=elapsed;
		#endif
		if (!Parent){
				Profile->Add(elapsed,TimeInChildren); return;}
		// checking calling function to be unique caller
		if (!Profile->FirstParentFunction){
			Profile->FirstParentFunction = Parent->Profile;}
		else{
			if (Profile->FirstParentFunction!=Parent->Profile) 
					Profile->FirstParentFunction = (QProfile*)(DWORD)1;}
			

		QProfileStarter * recursive = NULL;
		if (maybe_recursive)	
					recursive=RecursiveCallFrom();
		
		if (!recursive){ 
			Profile->Add(elapsed,TimeInChildren);
			Parent->TimeInChildren+=elapsed;}
		else {
			Profile->Counter++;
			if (recursive==Parent){
				Parent->TimeInChildren+=TimeInChildren;}
			else {
				Parent->TimeInChildren+=elapsed;
				//time in recursive call should be excluded
				recursive->TimeInChildren -= elapsed-TimeInChildren;}}
return;}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.66久久| 欧美精品一区二| 精品国产精品一区二区夜夜嗨| 日韩理论在线观看| 91在线高清观看| 欧美国产精品一区二区| 久久99国产精品成人| 欧美一区二区三区爱爱| 亚洲成人免费看| 欧美日韩国产高清一区二区 | 91视频在线观看| 国产精品成人午夜| 99精品国产99久久久久久白柏| 国产欧美一区二区精品性色超碰| 国产高清在线精品| 国产精品久久久久久久久久免费看| 蜜乳av一区二区| 国产日韩精品一区二区三区| 国产91高潮流白浆在线麻豆| 综合久久国产九一剧情麻豆| 一本大道av一区二区在线播放| 亚洲乱码中文字幕| 在线不卡中文字幕播放| 美女视频网站久久| 国产精品国产三级国产普通话99| 91麻豆高清视频| 久久97超碰色| 亚洲九九爱视频| 日韩三级电影网址| 国产激情一区二区三区四区| 一区二区三区国产精华| 精品国产成人在线影院| 91一区一区三区| 美女网站色91| 亚洲综合色区另类av| 久久一区二区三区国产精品| 欧美日韩国产综合一区二区 | 床上的激情91.| 三级久久三级久久| 成人欧美一区二区三区白人| 日韩欧美黄色影院| 欧美三级电影网| 日韩亚洲欧美在线观看| 欧美日韩国产大片| 国产大陆亚洲精品国产| 精品一二三四区| 狠狠色丁香婷婷综合久久片| 久久99这里只有精品| 91蜜桃传媒精品久久久一区二区| 不卡在线视频中文字幕| 色哟哟欧美精品| 日韩精品一区二区三区视频播放 | 国产在线精品一区二区不卡了| 亚洲一区二区三区四区五区中文| 成人免费在线视频| 欧美激情综合五月色丁香 | 丰满亚洲少妇av| 国产福利一区二区三区在线视频| 另类小说综合欧美亚洲| 六月婷婷色综合| 国产高清精品久久久久| 国产资源精品在线观看| 国产精品一区二区久久不卡| 国产一区激情在线| 懂色av噜噜一区二区三区av| 99久久免费精品| 欧美精品在欧美一区二区少妇| 欧美丝袜丝nylons| 欧美zozo另类异族| xfplay精品久久| 日韩毛片在线免费观看| 樱桃视频在线观看一区| 欧美激情一区不卡| 中文字幕一区在线| 午夜成人免费视频| 日韩av电影免费观看高清完整版在线观看| 一区二区三区四区激情| 麻豆精品国产传媒mv男同| 国产91精品久久久久久久网曝门| 在线日韩国产精品| 欧美成人精品3d动漫h| 一区在线观看免费| 久久99精品久久久| 亚洲国产视频直播| 日韩精品一区第一页| 成人国产精品免费| 欧美一区二区视频在线观看2022 | 中文字幕一区二区视频| 日韩va亚洲va欧美va久久| 国产成人亚洲综合色影视| 欧美日韩亚洲综合| 国产精品无码永久免费888| 香蕉加勒比综合久久| 高清免费成人av| 久久亚洲精精品中文字幕早川悠里| 亚洲乱码中文字幕| 波多野结衣亚洲| 欧美极品xxx| 国产一区二区免费看| 精品国产区一区| 喷白浆一区二区| 91精品国产综合久久国产大片| 亚洲欧美另类久久久精品2019| 91在线免费看| 国产精品成人免费精品自在线观看| 蜜臀av一级做a爰片久久| 欧美一级高清大全免费观看| 亚洲影视在线播放| 欧美视频三区在线播放| 午夜精品福利久久久| 欧美美女网站色| 久久精品国产99久久6| 日韩亚洲电影在线| 老司机精品视频线观看86| 精品国偷自产国产一区| 国产成人精品午夜视频免费| 国产欧美一区二区三区鸳鸯浴 | 色婷婷激情综合| 午夜日韩在线观看| 亚洲精品一区二区三区99| 亚洲国产日韩精品| 欧美高清视频不卡网| 韩日精品视频一区| 亚洲三级免费电影| 欧美大片顶级少妇| 成人app在线观看| 午夜精品免费在线| 久久久99久久| 91麻豆精品国产综合久久久久久 | 欧美亚洲另类激情小说| 国产在线精品一区二区三区不卡| 欧美日韩不卡一区| 婷婷中文字幕综合| 中文字幕一区三区| 久久夜色精品国产欧美乱极品| 欧美午夜影院一区| gogo大胆日本视频一区| 久久电影网电视剧免费观看| 亚洲二区视频在线| 亚洲综合久久久| 亚洲欧美日韩国产综合| 欧美午夜片在线看| 精品一区二区三区视频 | 成人三级在线视频| 免费观看久久久4p| 亚洲一区二区在线播放相泽| 亚洲欧美综合在线精品| 精品国产乱码久久久久久闺蜜| 欧美色中文字幕| 成人av动漫网站| 国产在线播放一区| 日日夜夜免费精品视频| 天天综合天天做天天综合| 亚洲在线观看免费视频| 午夜在线成人av| 日韩黄色小视频| 激情伊人五月天久久综合| 日av在线不卡| 韩国精品在线观看| 国产精品18久久久久| 经典一区二区三区| 国产在线国偷精品免费看| 日韩制服丝袜av| 国产一级精品在线| www.欧美亚洲| 欧美男女性生活在线直播观看| 在线播放91灌醉迷j高跟美女| 日韩视频免费观看高清完整版| 日韩精品影音先锋| 欧洲视频一区二区| 国产精品久久夜| 亚州成人在线电影| 狠狠色丁香婷综合久久| 成人av免费在线| 欧美一级二级三级乱码| 成人欧美一区二区三区小说| 亚洲国产精品精华液网站| 久久99久久99| 91久久免费观看| 国产亚洲综合av| 免费成人在线观看| 色成年激情久久综合| 日韩精品一区二区三区swag| 一区二区三区在线视频免费| 激情综合网最新| 欧美丰满美乳xxx高潮www| 久久理论电影网| 久久国产精品一区二区| 97精品电影院| 国产精品少妇自拍| 亚洲国产中文字幕| 麻豆精品一区二区综合av| 亚洲精品乱码久久久久久| 日韩av不卡一区二区| 色综合一区二区三区| 中文字幕日韩av资源站| 国产传媒欧美日韩成人| 久久久噜噜噜久久人人看| 韩国成人在线视频| 亚洲男同性视频|