Linux下的时间计算及所在文件所在行打印

#ifndef __WRITE_LOG_H__
#define __WRITE_LOG_H__
/*
 *Filename: WriteLog.h
 *Author:   逐影
 *Created:  2014 - 08月 - 29
 *Last modified: 2014 - 08月 - 29
 * */
#include <sys/time.h>
#include <unistd.h>//sleep函数
#include <stdio.h>
#include <stdarg.h>

//WRITE_LOG

#define LL_ERROR 50
#define LL_MSG 40
#define LL_WARING 30
#define LL_TRACE 20
#define LL_DEBUG 10

extern int g_level;
/**
 *  struct timeval {
 *  time_t tv_sec; // seconds
 *  time_t tv_usec; // microseconds
 *  };
 **/
extern struct timeval tv_start;
extern struct timeval tv_end;
extern double dfTim;
extern double timediff;
static void PL_LOG(int nLevel, const char *file, const int line, const char* format,  ...);

#define PL_ERROR(msg, ...) PL_LOG(LL_ERROR, __FILE__, __LINE__, msg, __VA_ARGS__)
#define PL_MSG(msg, ...) PL_LOG(LL_MSG, __FILE__, __LINE__, msg, __VA_ARGS__)
#define PL_WARING(msg, ...) PL_LOG(LL_WARING, __FILE__, __LINE__, msg, __VA_ARGS__)
#define PL_TRACE(msg, ...) PL_LOG(LL_TRACE, __FILE__, __LINE__, msg, __VA_ARGS__)
#define PL_DEBUG(msg, ...) PL_LOG(LL_DEBUG, __FILE__, __LINE__, msg, __VA_ARGS__)

void PL_LOG(int nLevel, const char *file, const int line, const char* format,  ...) /*…为可变参数,不限定个数和类型。(后面采用专门的指针指向他)*/
{
    va_list ap; //初始化指向可变参数列表的指针
    char buf[1024]; //定义存放可变参数转化成格式化字符串的数组。
    char log[1024];
    int  res = 0;
    char *tf = (char *)file;
    char *sf = NULL;
    if(nLevel < g_level)
    {
        return;
    }
    va_start(ap, format); //将第一个可变参数的地址赋给ap,即ap指向可变参数列表的开始。

    res = vsprintf(buf, format, ap); //将参数ap和format进行转化形成格式化字符串,即可以显示的字符串。

    va_end(ap);//将参数ap复位。
    while((sf = strstr(tf, "/")) != NULL)
    {
        sf ++;
        tf = sf;
    }
    if(res >= 0)
    {
        snprintf(log, sizeof(log), "<%s:%d> | %s\n", tf, line, buf);
        printf("%s", log);
    }

    return;
}

//它获得的时间精确到微秒(1e-6 s)量级
//输出JMVC版本信息
#define PL_VERSION() \
{\
    PL_MSG("JMVC %s Encoder (running on a %d-bit system)\n", _JMVC_VERSION_, sizeof(void*)*8);\
}

#define FUN_START(p)\
{\
    gettimeofday(&tv_start, NULL);\
    PL_MSG("[%s] Start [%ld]", p, tv_start.tv_sec);\
}

#define FUN_END(p)\
{\
    gettimeofday(&tv_end, NULL);\
    PL_MSG("[%s] End [%ld]", p, tv_end.tv_sec);\
    timediff = (tv_end.tv_sec - tv_start.tv_sec)*1000000 + ( tv_end.tv_usec - tv_start.tv_usec);\
    dfTim = timediff/1000000;\
    PL_MSG("编码时间约:%f 秒", dfTim);\
}

#endif


 

你可能感兴趣的:(Linux下的时间计算及所在文件所在行打印)