获取程序段执行时间

struct timeval pre_time, now_time;
unsigned int time;

gettimeofday(&pre_time, NULL);
要测试的程序段
gettimeofday(&now_time, NULL);


time = (now_time.tv_sec - pre_time.tv_sec) * 1000000;
time += now_time.tv_usec;
time -= pre_time.tv_usec;

printf("pass time = %d [us]\n", time);

 

这是错误的
/*
* start_stop : 0 start,1 stop * distinguish: used to distinguish each other */ void print_time(int start_stop, int distinguish) { uint64_t diff_time, diff_sec, diff_usec; static struct timeval pre_time, now_time; if(!start_stop) { pre_time.tv_sec = 0; pre_time.tv_usec = 0; now_time.tv_sec = 0; now_time.tv_usec = 0; gettimeofday(&pre_time, NULL); } else { gettimeofday(&now_time, NULL); diff_sec = now_time.tv_sec - pre_time.tv_sec; diff_usec = now_time.tv_usec - pre_time.tv_usec; diff_time = (diff_sec * 1000000 + diff_usec) / 1000; dbg_printf("[%d]: diff_time=%lu ms\n", distinguish, diff_time); } }

 

这是错误的!
/*
* start_stop : 0 start,1 stop * distinguish: used to distinguish each other */ void print_time(int start_stop, int distinguish) { uint32_t diff_time, diff_sec, diff_usec; static struct timeval pre_time, now_time; if(!start_stop) { pre_time.tv_sec = 0; pre_time.tv_usec = 0; now_time.tv_sec = 0; now_time.tv_usec = 0; gettimeofday(&pre_time, NULL); } else { gettimeofday(&now_time, NULL); diff_sec = now_time.tv_sec - pre_time.tv_sec; diff_usec = now_time.tv_usec - pre_time.tv_usec; diff_time = diff_sec * 1000 + diff_usec / 1000; dbg_printf("[%d]: diff_time=%d ms\n", distinguish, diff_time); } }

 

/*
 * start_stop : 0 start,1 stop
 * distinguish: used to distinguish each other
 */
void print_time(int start_stop, int distinguish)
{
    uint64_t diff_time, diff_sec, diff_usec;
    static struct timeval pre_time, now_time;

    if(!start_stop) {
        pre_time.tv_sec  = 0;
        pre_time.tv_usec = 0;
        now_time.tv_sec  = 0;
        now_time.tv_usec = 0;
        gettimeofday(&pre_time, NULL);
    } else {
        gettimeofday(&now_time, NULL);
    
        diff_sec  = now_time.tv_sec  - pre_time.tv_sec;
        diff_usec = now_time.tv_usec > pre_time.tv_usec ?
            now_time.tv_usec - pre_time.tv_usec :
            pre_time.tv_usec - now_time.tv_usec ;
        diff_time = (diff_sec * 1000000 + diff_usec) / 1000;
        dbg_printf("[%d]: diff_time=%lu ms\n", distinguish, diff_time);
    }
}

 

这个比较好用:

#define print_log_with_time(fmt, args...)                                          \
do {                                                                          \
        struct timespec ts;                                               \
        clock_gettime(CLOCK_MONOTONIC,&ts);                               \
        fprintf(stderr,"[%5lu.%06lu] initsvscripts %s:%d: " fmt "\n",    \
                    ts.tv_sec, ts.tv_nsec / 1000, __func__, __LINE__, ##args);    \
    } while (0)

 

posted on 2017-12-17 23:17  Hello-World3  阅读(238)  评论(0编辑  收藏  举报

导航