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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? simplelog.cpp

?? 自動(dòng)調(diào)整大小的進(jìn)程池類的實(shí)現(xiàn)。 一個(gè)運(yùn)用進(jìn)程池的server類。 一個(gè)socket類。
?? CPP
字號(hào):
/***************************************************************
* Author:		趙艷興
* Company:		Intervision							  			
* Last Update:	2005-01-17		 								
* Copyright(c), Intervision Software Co., Ltd. Beijing. 
* 				All Rights Reserved	
*------------------------------------------------------------ 	
* FileName:		Log.cpp
* Function Note:	Sys Log implementation.
* Update note:		Created at 2003-09-10
*****************************************************************/

#include <stdio.h>
#include <assert.h>
#include <unistd.h>
#include "SimpleLog.h"

//#ifndef WIN32
//static pthread_mutexattr_t	_attr;
//#endif

SIMPLELOG::SimpleLog::SimpleLog()
{
	m_LogOptions = SimpleLog::FileByDay | SimpleLog::DateAndTime;
	m_LogLevel = 3;
	m_LogPath[0] = 0;
	this->m_LogFileName = "";
	this->m_pf = NULL;
	this->m_strBuf[0] = 0;
	m_bEnable = true;
	m_Prefix = "";
	m_Suffix = "log";
#ifdef WIN32
	InitializeCriticalSection(&_mutex);
#else
	//pthread_mutexattr_init(&_attr);
	pthread_mutex_init(&_mutex,NULL);
#endif

}

SIMPLELOG::SimpleLog::SimpleLog(unsigned level, unsigned options,const char *filename)
{
	this->m_LogOptions = options;
	this->m_LogLevel = level;
	this->m_LogFileName = "";
	m_LogPath[0] = 0;
	this->m_pf = NULL;
	this->m_strBuf[0] = 0;
	m_bEnable = true;
	m_Prefix = "";
	m_Suffix = "log";
	
	if( m_LogOptions&FileByDay )
	{
		if( !m_Suffix.empty() )
			m_LogFileName += m_Prefix;
		m_LogFileName += SimpleLog::GetFileTime();
		m_LogFileName += ".";
		m_LogFileName += m_Suffix;
	}
	else if( m_LogOptions&FileByName )
	{
		assert( filename );
		this->m_LogFileName = filename;
	}
}

SIMPLELOG::SimpleLog::~SimpleLog()
{
	if( m_pf )
		fclose(m_pf );
#ifdef WIN32
	DeleteCriticalSection(&_mutex);
#else
	pthread_mutex_destroy(&_mutex);
#endif
}

string SIMPLELOG::SimpleLog::GetSystemTime()
{
	string strSystemTime = "" ;
	char chTmp[15] = "";
	
#if	defined(WIN32)
	/*win32的取時(shí)間方法*/
	SYSTEMTIME temp;
	GetLocalTime(&temp);
	sprintf(chTmp, "%04d%02d%02d%02d%02d%02d" ,(short)temp.wYear,
		(char)temp.wMonth,(char)temp.wDay,(char)temp.wHour,(char)temp.wMinute,(char)temp.wSecond); 		
#else
	struct tm *newtime;
    time_t long_time;
    time( &long_time );                
    newtime = localtime( &long_time ); 
	sprintf(chTmp, "%04d%02d%02d%02d%02d%02d" ,newtime->tm_year + 1900,
		newtime->tm_mon + 1,newtime->tm_mday,newtime->tm_hour,newtime->tm_min,newtime->tm_sec); 	
#endif
	strSystemTime = (char *)chTmp;	 
	
	return strSystemTime ;
}

string SIMPLELOG::SimpleLog::GetFileTime()
{
	string strSystemTime = "" ;
	char chTmp[15] = "";
	
#if	defined(WIN32)
	/*win32的取時(shí)間方法*/
	SYSTEMTIME temp;
	GetLocalTime(&temp);
	sprintf(chTmp, "%04d%02d%02d" ,(short)temp.wYear,
		(char)temp.wMonth,(char)temp.wDay); 		
#else
	struct tm *newtime;
    time_t long_time;
    time( &long_time );                
    newtime = localtime( &long_time ); 
	sprintf(chTmp, "%04d%02d%02d" ,newtime->tm_year + 1900,
		newtime->tm_mon + 1,newtime->tm_mday); 	
#endif
	strSystemTime = (char *)chTmp;	 
	
	return strSystemTime ;
}

string SIMPLELOG::SimpleLog::FormatTime(string systemTime)
{
	string tmp;
	tmp = systemTime.substr(0,4);
	tmp += " ";
	tmp += systemTime.substr(4,2);
	tmp += "-";
	tmp += systemTime.substr(6,2);
	tmp += " ";
	tmp += systemTime.substr(8,2);
	tmp += ":";
	tmp += systemTime.substr(10,2);
	tmp += ":";
	tmp += systemTime.substr(12,2);
	//tmp += "sec";
	return tmp;
}

void SIMPLELOG::SimpleLog::SetOptions(unsigned options)
{
	m_LogOptions =options;
}

void SIMPLELOG::SimpleLog::ClearOptions(unsigned options)
{
	m_LogOptions &= ~options;
}

void SIMPLELOG::SimpleLog::AddOptions(unsigned options)
{
	m_LogOptions |= options;
}

unsigned SIMPLELOG::SimpleLog::GetOptions()
{
	return m_LogOptions;
}

void SIMPLELOG::SimpleLog::SetLevel(unsigned level)
{
	if (level>=MAX_LEVEL) 
	{
		m_LogLevel=1;
	}
	else 
	{
		m_LogLevel = level;
	}
}

unsigned SIMPLELOG::SimpleLog::GetLevel()
{
	return m_LogLevel;
}

bool SIMPLELOG::SimpleLog::CanTrace(unsigned level)
{
	return ( level <= m_LogLevel && m_bEnable );
}

string SIMPLELOG::SimpleLog::AddPath(const char *fileName)
{
	string FileName;
	FileName = m_LogPath;
	FileName += fileName;
	return FileName;
}

void  SIMPLELOG::SimpleLog::ReturnFileName(char *filename)
{
	//按天產(chǎn)生日志的文件名
	string FileName;
	if( !m_Suffix.empty() )
	{
		FileName += m_Prefix;
	}
	FileName += SimpleLog::GetFileTime();
	FileName += ".";
	FileName += m_Suffix;
	strcpy(filename,FileName.c_str());
}

short SIMPLELOG::SimpleLog::BeginLogHead(unsigned level)
{
	//按天產(chǎn)生日志
	if( m_LogOptions&FileByDay )
	{
		string FileName;
		FileName = SimpleLog::GetFileTime();
		FileName = FileName.substr(0,10);
		if( !m_Suffix.empty() )
		{
			FileName += "_";
			FileName += m_Suffix;
		}
		FileName += ".log";
		
		//日期改變因此文件名改變
		if( FileName != m_LogFileName )
		{
			if( m_pf )
				fclose(m_pf);
			m_LogFileName = FileName;
			FileName = AddPath( FileName.c_str() );
			m_pf = fopen(FileName.c_str(),"a");			
		}
		//日期沒(méi)變但是還沒(méi)有打開(kāi)過(guò)文件
		else if( !m_pf )
		{
			m_LogFileName = FileName;
			FileName = AddPath( FileName.c_str() );
			m_pf = fopen(FileName.c_str(),"a");
		}
	}
	//不按天產(chǎn)生日志,文件名不為空并且文件還沒(méi)有打開(kāi)
	else if( m_LogOptions&FileByName )
	{
		if( m_LogFileName.c_str() != NULL && !m_pf)
		{
			string file;
			file = AddPath( m_LogFileName.c_str() );
			m_pf = fopen(m_LogFileName.c_str(),"a");
		}
	}
	//輸出到屏幕
	else 
		m_pf = stdout;

	if( !m_pf )
		return -1;
		
	short size=0;
	
	//lock();	//lock是為了不使寫文件出現(xiàn)混亂
	
	if ((m_LogOptions&FileAndLine) != 0 && m_DebugFileName != "" ) 
	{
		const char * file = strrchr(m_DebugFileName.c_str(), '/');
		if (file != NULL)
		{
			file++;
		}
		else 
		{
			file = strrchr(m_DebugFileName.c_str(), '\\');
			if (file != NULL)
			{
				file++;
			}
			else
			{
				file = m_DebugFileName.c_str();
			}
		}	
		size += fprintf(m_pf,"%s%s%d%s",file,"(",m_LineNum,")---");	
	}
	//unlock();

	return size;
}

short SIMPLELOG::SimpleLog::BeginLog(unsigned level)
{
	//按天產(chǎn)生日志
	if( m_LogOptions&FileByDay )
	{
		string FileName;
		if( !m_Suffix.empty() )
		{
			FileName = m_Prefix;
		}
		FileName += SimpleLog::GetFileTime();
		FileName += ".";
		FileName += m_Suffix;

		//日期改變因此文件名改變
		if( FileName != m_LogFileName )
		{
			if( m_pf )
				fclose(m_pf);
			m_LogFileName = FileName;
			FileName = AddPath( FileName.c_str() );
			m_pf = fopen(FileName.c_str(),"a");			
		}
		//日期沒(méi)變但是還沒(méi)有打開(kāi)過(guò)文件
		else if( !m_pf )
		{
			m_LogFileName = FileName;
			FileName = AddPath( FileName.c_str() );
			m_pf = fopen(FileName.c_str(),"a");
		}
	}
	//不按天產(chǎn)生日志,文件名不為空并且文件還沒(méi)有打開(kāi)
	else if( m_LogOptions&FileByName )
	{
		if( m_LogFileName.c_str() != NULL && !m_pf)
		{
			string file;
			file = AddPath( m_LogFileName.c_str() );
			m_pf = fopen(m_LogFileName.c_str(),"a");
		}
	}
	//輸出到屏幕
	else 
		m_pf = stdout;

	if( !m_pf )
		return -1;
		
	short size=0;
	
	//lock();	//lock是為了不使寫文件出現(xiàn)混亂
	if ((m_LogOptions&TraceLevel) != 0)
	{
		size = fprintf(m_pf,"%s%d%s","Level(",level,") ");
	}
	
    if ((m_LogOptions&DateAndTime) != 0) 
	{
		#ifdef _THREADS
		size += fprintf(m_pf,"%s[%-10ld]###",FormatTime(SimpleLog::GetSystemTime()).c_str(),pthread_self() );
		#else
		size += fprintf(m_pf,"%s[%-10ld]###",FormatTime(SimpleLog::GetSystemTime()).c_str(),getpid() );
		#endif	  
   }
	
	if ((m_LogOptions&FileAndLine) != 0 && m_DebugFileName != "" ) 
	{
		const char * file = strrchr(m_DebugFileName.c_str(), '/');
		if (file != NULL)
		{
			file++;
		}
		else 
		{
			file = strrchr(m_DebugFileName.c_str(), '\\');
			if (file != NULL)
			{
				file++;
			}
			else
			{
				file = m_DebugFileName.c_str();
			}
		}
		
		size += fprintf(m_pf,"%s%s%d%s",file,"(",m_LineNum,")---");		
	}
	//unlock();

	return size;
}

#ifdef ANSI
long SIMPLELOG::SimpleLog::UserlogHead(unsigned level,const char *fmt,...)
{	
	if (!CanTrace(level)) 
		return 0;

	lock();//加鎖是為了寫文件出現(xiàn)混亂
	
	int ret = BeginLogHead(level);
	if( ret < 0 )
	{
		unlock();
		return ret;	
	}

	try
	{
		va_list argptr;
		va_start(argptr, fmt);
#ifdef WIN32
		_vsnprintf((char*)&m_strBuf, TBUF_SIZE, fmt, argptr);
#else
		vsnprintf((char*)&m_strBuf, TBUF_SIZE, fmt, argptr);
#endif
		va_end(argptr);
	}
	catch (...)
	{
		unlock();
		return -2;
	}
	long size = fprintf(m_pf,"%s\n",m_strBuf);
#ifdef _DEBUG
	Flush();
#endif
	unlock();
	return size;
}
#endif

#ifdef ANSI
long SIMPLELOG::SimpleLog::Userlog(unsigned level,const char *fmt,...)
{
	
	if (!CanTrace(level)) 
		return 0;
	
	lock();//加鎖是為了寫文件出現(xiàn)混亂
	int ret = BeginLog(level);
	if( ret<0 )
	{
		unlock();
		return ret;	
	}
	try
	{
		va_list argptr;
		va_start(argptr, fmt);
#ifdef WIN32
		_vsnprintf((char*)&m_strBuf, TBUF_SIZE, fmt, argptr);
#else
		vsnprintf((char*)&m_strBuf, TBUF_SIZE, fmt, argptr);
#endif
		va_end(argptr);
	}
	catch (...)
	{
		unlock();
		return -2;
	}
	long size = fprintf(m_pf,"%s\n",m_strBuf);
#ifdef _DEBUG
	Flush();
#endif

/***********************/
	fflush(m_pf);
/************************/
	
	unlock();

	return size;
}
#else
long SIMPLELOG::SimpleLog::Userlog(unsigned level,const char *fmt,va_alist)
va_dcl
{

}
#endif
	
short SIMPLELOG::SimpleLog::SetFile( const char *fileName )
{
	assert(fileName);
	
	if( m_LogOptions&FileByDay || m_LogOptions&DisplayScreen || m_LogFileName == fileName )
		return 0;
	m_LogFileName = fileName;
	
	if (!CanTrace(m_LogLevel)) 
		return 0;

	string tmp;
	tmp = AddPath(fileName);

	if( m_pf )
		fclose(m_pf);
	m_pf = fopen(tmp.c_str(),"a");
	if( !m_pf )
		return -1;
	return 1;
}

void SIMPLELOG::SimpleLog::SetLogPath(const char *logPath)
{
	if( !strcmp(logPath,"") )
		return;
	strcpy((char*)m_LogPath,logPath);
#ifdef WIN32
	if( !strcmp(logPath,".") )
		strcat(m_LogPath,"\\");
	if( logPath[strlen(logPath)-1]!='\\' )
			strcat((char*)m_LogPath,"\\");
#else
	if( !strcmp(logPath,".") )
		strcat(m_LogPath,"/");
	if( logPath[strlen(logPath)-1]!='/' )
			strcat((char*)m_LogPath,"/");
#endif			
}

void SIMPLELOG::SimpleLog::lock()
{
	#if defined(WIN32)
	EnterCriticalSection(&_mutex);
#else
	if( pthread_mutex_lock(&_mutex) != 0 )
		printf("Error:	Lock fail!\n");
#endif
}

void SIMPLELOG::SimpleLog::unlock()
{
	#if defined(WIN32)
	LeaveCriticalSection(&_mutex);
#else
	if ( pthread_mutex_unlock(&_mutex) != 0 )
		printf("Error:	Unlock fail!\n");
#endif
}
		

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清你懂得| 国产日产欧美精品一区二区三区| 韩国中文字幕2020精品| 国产精品萝li| 日韩一级大片在线| 91毛片在线观看| 国产不卡在线视频| 日韩国产欧美在线视频| 亚洲欧美一区二区三区久本道91| 欧美不卡一二三| 欧美美女视频在线观看| 成人黄色免费短视频| 老司机免费视频一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 久久久蜜臀国产一区二区| 欧美精品日韩一区| 色88888久久久久久影院按摩| 国产麻豆精品在线| 看电视剧不卡顿的网站| 亚洲第一综合色| 国产精品国产三级国产普通话99| 欧美成人猛片aaaaaaa| 欧美日韩国产不卡| 日本精品裸体写真集在线观看 | 亚洲成人av一区| 久久精品亚洲精品国产欧美| 欧美一级黄色录像| 欧美日韩一区二区三区在线| 99国产精品久| av资源网一区| 国产成a人亚洲精| 国产剧情在线观看一区二区| 蜜桃视频在线观看一区二区| 午夜精品免费在线| 石原莉奈一区二区三区在线观看| 一区二区三区欧美视频| 亚洲柠檬福利资源导航| 亚洲激情在线激情| 久久精品国产77777蜜臀| 婷婷开心久久网| 偷拍亚洲欧洲综合| 日韩电影免费在线| 日韩国产成人精品| 久久精品久久精品| 国产做a爰片久久毛片| 国产裸体歌舞团一区二区| 国产乱码精品一品二品| 国产sm精品调教视频网站| 国产成人精品影视| 成人sese在线| 日本韩国视频一区二区| 欧美日韩视频一区二区| 欧美一区二区三区免费视频| 精品国产一区久久| 久久精品水蜜桃av综合天堂| 中文一区二区在线观看| 亚洲欧美电影院| 亚洲成人你懂的| 久久精品国产亚洲5555| 国产一区在线不卡| 波多野结衣一区二区三区| 欧美在线不卡视频| 日韩一区二区免费电影| 久久精品亚洲麻豆av一区二区| 中文字幕的久久| 一区二区三区电影在线播| 三级一区在线视频先锋| 国产在线一区观看| 99热在这里有精品免费| 欧美久久久久免费| 国产欧美日韩综合精品一区二区| 亚洲人成网站色在线观看| 午夜精彩视频在线观看不卡| 激情五月婷婷综合网| 99精品视频一区二区| 欧美一区二区在线免费观看| 国产欧美日韩卡一| 亚洲最大成人网4388xx| 玖玖九九国产精品| 色哟哟一区二区在线观看| 717成人午夜免费福利电影| 久久久国产午夜精品| 亚洲一区在线播放| 国产精品亚洲一区二区三区妖精 | 国产酒店精品激情| 在线观看国产日韩| 久久夜色精品国产噜噜av| 一区二区三区在线观看视频| 裸体在线国模精品偷拍| 色综合久久88色综合天天6| 欧美日韩成人综合天天影院 | 欧美丰满美乳xxx高潮www| 国产片一区二区三区| 午夜精品爽啪视频| 国产成人亚洲综合色影视| 91精品国产色综合久久久蜜香臀| 国产欧美精品在线观看| 美国av一区二区| 欧美日韩一级大片网址| 国产精品国产三级国产有无不卡| 免播放器亚洲一区| 在线免费观看不卡av| 中文字幕第一区| 国产在线国偷精品产拍免费yy| 精品视频在线免费| 日韩美女视频一区| 国产精品99久久久久久似苏梦涵| 欧美精品第1页| 亚洲一二三四在线观看| 成人精品视频网站| 精品国产91亚洲一区二区三区婷婷| 亚洲一区二区精品视频| 久久电影国产免费久久电影| 欧美在线你懂的| 中文字幕一区av| 国产高清无密码一区二区三区| 日韩视频在线你懂得| 亚洲v中文字幕| 欧美性大战久久久久久久| 亚洲色欲色欲www| 成人综合激情网| 国产拍揄自揄精品视频麻豆| 久久精品免费观看| 日韩精品中文字幕在线不卡尤物| 五月婷婷激情综合网| 欧美日韩午夜在线| 亚洲主播在线观看| 欧美性欧美巨大黑白大战| 亚洲欧美精品午睡沙发| 色婷婷精品久久二区二区蜜臀av| 国产精品久久午夜夜伦鲁鲁| 成人精品国产福利| 国产精品免费观看视频| 99国产精品一区| 亚洲欧美色图小说| 91网站最新地址| 亚洲自拍与偷拍| 精品1区2区3区| 日韩成人免费电影| 欧美一区二区三区色| 九九国产精品视频| 久久天堂av综合合色蜜桃网| 国产中文字幕精品| 国产人久久人人人人爽| 成人国产亚洲欧美成人综合网| 国产精品福利电影一区二区三区四区| proumb性欧美在线观看| 日韩伦理电影网| 日本精品一级二级| 无码av免费一区二区三区试看 | 日韩成人精品视频| 欧美一级生活片| 韩日欧美一区二区三区| 欧美激情一区二区三区蜜桃视频 | 一区二区三区四区不卡在线| 欧洲一区在线电影| 日韩高清电影一区| 久久精品在线免费观看| av资源站一区| 日日摸夜夜添夜夜添精品视频| 日韩三级免费观看| 国产超碰在线一区| 一区二区三区91| 日韩久久久久久| 99久久精品国产导航| 午夜久久电影网| 久久久久久久久免费| 色噜噜狠狠色综合中国| 男人的天堂亚洲一区| 国产精品美女久久久久久久久久久| 在线观看亚洲a| 久久se精品一区精品二区| 国产精品久久久久一区二区三区共| 在线观看日韩国产| 国产伦精品一区二区三区免费迷| 亚洲精品欧美二区三区中文字幕| 日韩色在线观看| 99这里只有精品| 蜜臀a∨国产成人精品| 国产精品色哟哟网站| 欧美男人的天堂一二区| 国产成人综合网站| 亚洲大型综合色站| 国产精品夫妻自拍| 欧美电影免费观看高清完整版在线| 成人av网址在线观看| 日本午夜一本久久久综合| 国产精品的网站| 精品三级在线看| 欧美日韩高清影院| 成人污视频在线观看| 免费av成人在线| 亚洲精品免费看| 欧美极品美女视频| 日韩欧美一级二级三级| 色94色欧美sute亚洲线路二| 国产精品99久| 久久精品国产精品亚洲综合| 亚洲成a人片综合在线| 1000精品久久久久久久久|