Andy Niu Help
1.0.0.0
|
模块 | |
Rapidxml | |
变量 | |
C | 跨平台定时器 |
我的日志 | |
控制台进度条 | |
详细描述
变量说明
我的日志 |
头文件
#ifndef NIU_LOG_H_ #define NIU_LOG_H_ #ifdef DLL_FILE #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif #include <stdarg.h> #include <string> #include <windows.h> using namespace std; #define LOG_DEBUG 1 #define LOG_INFO 2 #define LOG_WARN 4 #define LOG_ERROR 8 #define LOG_FATAL 16 #define OUTPUT_STD 1 #define OUTPUT_CONSOLE 2 class DLL_API NiuLog { public: NiuLog(); public: void Debug(const char* file,const char* func,int lineNum,const char* format, ...); void Info (const char* file,const char* func,int lineNum,const char* format, ...); void Warn (const char* file,const char* func,int lineNum,const char* format, ...); void Error(const char* file,const char* func,int lineNum,const char* format, ...); void Fatal(const char* file,const char* func,int lineNum,const char* format, ...); void SetLevel(int level); void GetLevel(int& level); void SetOutput(int output); void GetOutput(int& output); inline void SetConsoleColor(WORD colorValue); private: inline string getNowTimeAsString(); private: int _level; int _output; HANDLE _consoleHandle; }; #define LogDebug(log,format,...) do\ {\ log.Debug(__FILE__, __FUNCTION__, __LINE__,format,##__VA_ARGS__);\ }while(0) #define LogInfo(log,format,...) do\ {\ log.Info(__FILE__, __FUNCTION__, __LINE__,format,##__VA_ARGS__);\ }while(0) #define LogWarn(log,format,...) do\ {\ log.Warn(__FILE__, __FUNCTION__, __LINE__,format,##__VA_ARGS__);\ }while(0) #define LogError(log,format,...) do\ {\ log.Error(__FILE__, __FUNCTION__, __LINE__,format,##__VA_ARGS__);\ }while(0) #define LogFatal(log,format,...) do\ {\ log.Fatal(__FILE__, __FUNCTION__, __LINE__,format,##__VA_ARGS__);\ }while(0) #endif
源代码
#include "niu_log.h" #include <stdio.h> #include <time.h> #define LOG(x) do\ {\ if((_output & (OUTPUT_STD+OUTPUT_CONSOLE)) == 0)\ {\ return;\ }\ if((_level & LOG_##x) == 0)\ {\ return;\ }\ char buf[2048] = {0};\ sprintf(buf,"[" #x " %s %s:%s:%d] ",\ this->getNowTimeAsString().c_str(),\ file,\ func,\ lineNum);\ char* p = buf+strlen(buf);\ va_list ap;\ va_start(ap, format);\ p += _vsnprintf(p, sizeof(buf) - 1, format, ap);\ va_end(ap);\ int len = strlen(buf);\ buf[len] = '\r';\ buf[len+1] = '\n';\ if((_output & OUTPUT_STD) >0)\ {\ printf(buf);\ }\ if((_output & OUTPUT_CONSOLE) >0)\ {\ ::OutputDebugStringA(buf);\ }\ } while (0) NiuLog::NiuLog() { _consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); } void NiuLog::Debug(const char* file,const char* func,int lineNum,const char* format, ...) { SetConsoleColor(FOREGROUND_GREEN); LOG(DEBUG); } void NiuLog::Info(const char* file,const char* func,int lineNum,const char* format, ...) { SetConsoleColor(FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); LOG(INFO); } void NiuLog::Warn(const char* file,const char* func,int lineNum,const char* format, ...) { SetConsoleColor(FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY); LOG(WARN); } void NiuLog::Error(const char* file,const char* func,int lineNum,const char* format, ...) { SetConsoleColor(FOREGROUND_RED|FOREGROUND_INTENSITY); LOG(ERROR); } void NiuLog::Fatal(const char* file,const char* func,int lineNum,const char* format, ...) { SetConsoleColor(FOREGROUND_BLUE|FOREGROUND_INTENSITY); LOG(FATAL); } void NiuLog::SetLevel(int level) { _level = level; } void NiuLog::SetOutput(int output) { _output = output; } string NiuLog::getNowTimeAsString() { char buf[64] = {0}; time_t now = time(NULL); //方法1: /*tm* ptm = localtime(&now); sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);*/ //方法2: strftime(buf, 64, "%Y-%m-%d %H:%M:%S",localtime(&now)); return buf; } void NiuLog::SetConsoleColor(WORD colorValue) { if (_consoleHandle != INVALID_HANDLE_VALUE) { SetConsoleTextAttribute(_consoleHandle, colorValue); } }
测试
#include "niu_log.h" #include <string> using namespace std; int main(int argc, char* argv[]) { NiuLog log; log.SetLevel(LOG_DEBUG|LOG_INFO|LOG_WARN|LOG_ERROR|LOG_FATAL); log.SetOutput(OUTPUT_STD|OUTPUT_CONSOLE); LogDebug(log,"This is Debug"); LogInfo (log,"This is Info"); LogWarn (log,"This is Warn"); LogError(log,"This is Error"); LogFatal(log,"This is Fatal"); getchar(); return 0; }
控制台进度条 |
int len = 50; string str =""; for(int i=0; i<len;++i) { str+="|"; } log.SetConsoleColor(FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); printf("start...\n"); printf("%s\r",str.c_str()); // 打印竖线,然后回到行首 str =""; for(int i=0; i<len;++i) { str+=">"; } log.SetConsoleColor(FOREGROUND_GREEN|FOREGROUND_INTENSITY); for (int i = 0; i < len; ++i) { putchar(str[i]); Sleep(200); } putchar('\n'); printf("end\n");
C 跨平台定时器 |
1、头文件
#ifndef TIMER_H_ #define TIMER_H_ typedef void (*TimerTick)(void* param); struct TimerInfo { TimerTick _TimerTick; void* _Param; int _Start; int _Interval; TimerInfo(TimerTick timerTick,void* param,int start,int interval) { _TimerTick = timerTick; _Param = param; _Start = start; _Interval = interval; } }; class Timer { public: Timer(TimerTick timerTick,void* param,int start,int interval); }; #endif
2、实现
#include "timer.h" #ifdef WIN32 #include <windows.h> #else #include <pthread.h> #include <unistd.h> #endif void NiuSleep(int ms) { #ifdef WIN32 ::Sleep(ms); #else ::usleep(ms*1000); #endif } #ifdef WIN32 DWORD WINAPI ThreadRun(PVOID param) #else void* ThreadRun(void* param) #endif { TimerInfo* timerInfo = (TimerInfo*)param; NiuSleep(timerInfo->_Start); while(true) { timerInfo->_TimerTick(timerInfo->_Param); NiuSleep(timerInfo->_Interval); } return 0; } Timer::Timer(TimerTick timerTick,void* param,int start,int interval) { TimerInfo* timerInfo = new TimerInfo(timerTick,param,start,interval); #ifdef WIN32 HANDLE hThread = CreateThread(NULL,0,ThreadRun,timerInfo,0,NULL); CloseHandle(hThread); #else pthread_t hThread; pthread_create(&hThread,NULL,ThreadRun,(void*)timerInfo); #endif }
3、测试代码
#include "timer.h" #include <stdio.h> void tick(void* param) { printf("haha\n"); } int main(int argc,char* argv[]) { Timer timer(tick,NULL,5000,1000); getchar(); return 0; }
4、编译测试
[root@localhost Timer]# ll total 12 -rw-r--r-- 1 root root 181 Jan 7 17:17 main.cpp -rw-r--r-- 1 root root 823 Jan 7 17:15 timer.cpp -rw-r--r-- 1 root root 441 Jan 7 16:47 timer.h [root@localhost Timer]# g++ -c timer.cpp In file included from timer.cpp:1: timer.h:28:7: warning: no newline at end of file timer.cpp:48:2: warning: no newline at end of file [root@localhost Timer]# g++ -c main.cpp In file included from main.cpp:1: timer.h:28:7: warning: no newline at end of file main.cpp:16:2: warning: no newline at end of file [root@localhost Timer]# g++ -o main main.o timer.o -lpthread [root@localhost Timer]# ll total 28 -rwxr-xr-x 1 root root 6485 Jan 7 17:23 main -rw-r--r-- 1 root root 181 Jan 7 17:17 main.cpp -rw-r--r-- 1 root root 1308 Jan 7 17:23 main.o -rw-r--r-- 1 root root 823 Jan 7 17:15 timer.cpp -rw-r--r-- 1 root root 441 Jan 7 16:47 timer.h -rw-r--r-- 1 root root 1856 Jan 7 17:23 timer.o [root@localhost Timer]# ./main haha haha haha
Copyright (c) 2015~2016, Andy Niu @All rights reserved. By Andy Niu Edit.