⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logunit.cpp

📁 2002年
💻 CPP
字号:
#include "logunit.h"
#include <string.h>
#include <stdarg.h>

LogInfo::LogInfo(int max){
	int i;
	for(i =0; i < Max_Channels; i ++){
		LogOn[i] = false;
	}

	for(i =0; i < Max_Channels; i++)
		label[i][0] = 0;

	fp = NULL;
	maxlogcount = max;

	logbuffer_len = 0;

	validtime_s = 0;
	validtime_e = 6000;
	logpause = false;
	LogID = -1;

	b_mutex_guard = false;
}

LogInfo::~LogInfo(){
	if (fp != NULL){
		if (logbuffer_len > 0){
			fwrite(logbuffer, logbuffer_len, 1, fp);
			logbuffer_len = 0;
		}
		fclose(fp);
	}
	if(b_mutex_guard){
#ifdef WIN32	
		DeleteCriticalSection(&mutex_guard);
#else // _LINUX
		pthread_mutex_destroy(&mutex_guard);
#endif
		b_mutex_guard = false;
	}
}

bool LogInfo::CanLog(int lognum){
	if (fp==NULL || !IsValidChannel(lognum)) return false;
	if (IsChannelOn(lognum) && !logpause 
		&& time >= validtime_s  && time < validtime_e){
		return true;
	}
	else
		return false;
}

void LogInfo::Init_Mutex_Guard(){
	b_mutex_guard = true;
#ifdef WIN32
	InitializeCriticalSection(&mutex_guard); //initialize mutex	
#else // _LINUX
	pthread_mutex_init(&mutex_guard,NULL);
#endif
}

void LogInfo::AssociateFile(char *filename){
	if (fp == NULL){
		strcpy(logfilename, filename);
		fp = fopen(logfilename, "w");
	}
}

void LogInfo::SetLogOn(int lognum){
	if (IsValidChannel(lognum))
		LogOn[lognum] = true;
}

void LogInfo::SetLogOff(int lognum){
	if (IsValidChannel(lognum))
		LogOn[lognum] = false;
}

void LogInfo::SetLabel(int lognum, char* caption){
	if (IsValidChannel(lognum))
		strcpy(&label[lognum][0], caption);
}

void LogInfo::LogCore(int lognum, char * log){
	if (fp == NULL || !IsValidChannel(lognum))
		return;

	int writetofile = 0;
	int len_header, len_logstring;
	
	if (label[lognum][0] != 0)
		len_header = sprintf(&header[0],"(p%d,t%d)[%s]", LogID, time, label[lognum]);
	else
		len_header = sprintf(&header[0],"(p%d,t%d)", LogID, time);
	
	len_logstring = strlen(log);
	
	if (logbuffer_len + len_header + len_logstring + 1 > 5 * Max_LogMesg - 100 && logbuffer_len > 0){
		fwrite(logbuffer, logbuffer_len, 1, fp);
		fflush(fp);
		logbuffer_len = 0;
	}
	
	memcpy(logbuffer+logbuffer_len, header, len_header);
	logbuffer_len += len_header;
	memcpy(logbuffer+logbuffer_len, log, len_logstring);
	logbuffer_len += len_logstring;
	*(logbuffer+logbuffer_len) = 10;
	logbuffer_len += 1;

	logcount ++;
	if (logcount >= maxlogcount) {
		fflush(fp);
		logcount = 0;
	}
}


void LogInfo::LogAction(int lognum,char * format, ...){
	if (!CanLog(lognum)) return;
	
	Mutex_Lock();

	va_list argptr;
	va_start(argptr, format);
	vsprintf(logstring, format, argptr);
	va_end(argptr);
	LogCore(lognum,logstring);

	Mutex_UnLock();
}

void LogInfo::LogAction(char* format, ...){
	if (!CanLog(0)) return;	
	
	Mutex_Lock();

	va_list argptr;
	va_start(argptr, format);
	vsprintf(logstring, format, argptr);
	va_end(argptr);
	LogCore(0,logstring);
	
	Mutex_UnLock();
}
/******************	Log Data	***********************/
//Change technology of writing file to reduce 
void LogData::LogCore(int lognum, char * log){
	if (fp == NULL || !IsValidChannel(lognum) )
		return;

	int len_logstring;
	
	len_logstring = strlen(log);
	if (logbuffer_len + len_logstring + 1 > 5 * Max_LogMesg - 100){
		fwrite(logbuffer, logbuffer_len, 1, fp);
		logbuffer_len = 0;
	}
	
	memcpy(logbuffer+logbuffer_len, log, len_logstring);
	logbuffer_len += len_logstring;
	*(logbuffer+logbuffer_len) = 10;
	logbuffer_len += 1;

	logcount ++;
	if (logcount >= maxlogcount &&   fp != NULL) {		
		fflush(fp);
		logcount = 0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -