linux中c語言精確計時函數的使用

來源:互聯網
上載者:User

最近要對linux核心進行修改,要對某個函數進行計時。一時間竟然忘了計時函數的名字,所以寫了這個小短文,提醒自己。

#include<stdio.h>#include<time.h>#include<sys/time.h>#include<string.h>#include<stdlib.h>int main(void){        struct timeval starttime,endtime;        double timeuse;        gettimeofday(&starttime,NULL);        sleep(10);/*替換成你需要計時的部分*/        gettimeofday(&endtime,NULL);        timeuse=1000000*(endtime.tv_sec-starttime.tv_sec)+endtime.tv_usec-starttime.tv_usec;        timeuse/=1000000;/*轉換成秒輸出*/        printf("timeuse=%f",timeuse);        return 0;}

這是kvm中使用一段代碼:

/* Basic time functionality test: check that milliseconds are   incremented for each syscall (does not work on host).  */#include <stdio.h>#include <time.h>#include <sys/time.h>#include <string.h>#include <stdlib.h>void err (const char *s){  perror (s);  abort ();}intmain (void){  struct timeval t_m = {0, 0};  struct timezone t_z = {0, 0};  struct timeval t_m1 = {0, 0};  int i;  if (gettimeofday (&t_m, &t_z) != 0)    err ("gettimeofday");  for (i = 1; i < 10000; i++)    if (gettimeofday (&t_m1, NULL) != 0)      err ("gettimeofday 1");    else      if (t_m1.tv_sec * 1000000 + t_m1.tv_usec  != (t_m.tv_sec * 1000000 + t_m.tv_usec + i * 1000)){  fprintf (stderr, "t0 (%ld, %ld), i %d, t1 (%ld, %ld)\n",   t_m.tv_sec, t_m.tv_usec, i, t_m1.tv_sec, t_m1.tv_usec);  abort ();}  if (time (NULL) != t_m1.tv_sec)    {      fprintf (stderr, "time != gettod\n");      abort ();    }  printf ("pass\n");  exit (0);}

linux中clock_gettime也比較好用,就是開銷比較大。

#include<stdio.h>#include<time.h>#include<stdlib.h>static inline int64_t get_clock(void){    struct timespec ts;    clock_gettime(CLOCK_MONOTONIC,&ts);    return ts.tv_sec*1000000000LL+ts.tv_nsec;}int main(){    int64_t t1,t2;    t1=get_clock();    sleep(2);    t2=get_clock();    printf("t1=%ld\nt2=%ld\n",t1,t2);    return 0;}

gcc 編譯的時候加上要加上-lrt, -l表示連結指定庫,rt表示連結librt庫。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.