times函数用于获取当前进程时间,其函数原型如下所示:

#include <sys/times.h>
clock_t times(struct tms *buf);  //使用该函数需要包含头文件<sys/times.h>。

函数参数和返回值含义如下:
         buf:times()会将当前进程时间信息存在一个 struct tms 结构体数据中,所以我们需要提供 struct tms 变量,使用参数 buf 指向该变量 。

        返回值:返回值类型为 clock_t(实质是 long 类型),调用成功情况下,将返回从过去任意的一个时间点(譬如系统启动时间)所经过的时钟滴答数(其实就是系统节拍数),将(节拍数 / 节拍率)便可得到秒数,返回值可能会超过 clock_t 所能表示的范围(溢出);调用失败返回-1,并设置 errno。

        如果我们想查看程序运行到某一个位置时的进程时间,或者计算出程序中的某一段代码执行过程所花费的进程时间,都可以使用 times()函数来实现。

struct tms {
 clock_t tms_utime; /* user time, 进程的用户 CPU 时间, tms_utime 个系统节拍数 */

clock_t tms_stime; /* system time, 进程的系统 CPU 时间, tms_stime 个系统节拍数 */
clock_t tms_cutime; /* user time of children, 已死掉子进程的 tms_utime + tms_cutime 时间总和 */
clock_t tms_cstime; /* system time of children, 已死掉子进程的 tms_stime + tms_cstime 时间总和 */
}; 

代码示例:

#include<stdio.h>
#include<stdlib.h>
#include<sys/times.h>
#include<unistd.h>

int main(int argc ,char *agrv[])
{
    struct      tms     t_buf_start;
    struct      tms     t_buf_end;
    clock_t     t_start; 
    clock_t     t_end;
    long    tck;
    int     i , j;

    /*获取系统的节拍率*/
    tck = sysconf(_SC_CLK_TCK);

    /*开始时间*/
    t_start     =    times(&t_buf_start);
    if (-1 == t_start)
    {
        perror("times  error\n");
        exit(-1);
    }
    /*需要测试的代码段*/
    for ( i = 0; i < 20000; i++)
    {
       ////////////// 
    }
    for ( j = 0; j < 20000; j++)
    {
        /* code */
    }
    sleep(1);   //休眠挂起
    /*结束时间*/
    t_end   =   times(& t_buf_end);
    if (-1 == t_end)
    {
        /* code */
        perror("times error\n");
        exit(-1);
    }
    /*打印时间*/
    printf("时间总和: %f 秒\n", (t_end - t_start) / (double)tck);
    printf("用户 CPU 时间: %f 秒\n", (t_buf_end.tms_utime - t_buf_start.tms_utime) / (double)tck);
    printf("系统 CPU 时间: %f 秒\n", (t_buf_end.tms_stime - t_buf_start.tms_stime) / (double)tck);
    exit(0);

}

 运行结果:

clock 函数
库函数 clock()提供了一个更为简单的方式用于进程时间,它的返回值描述了进程使用的总的 CPU 时间(也就是进程时间,包括用户 CPU 时间和系统 CPU 时间),其函数原型如下所示:

#include <time.h>
clock_t clock(void);

使用该函数需要包含头文件<time.h>。

 函数参数和返回值含义如下:
无参数。
返回值:返回值是到目前为止程序的进程时间,为 clock_t 类型,注意 clock()的返回值并不是系统节拍
数,如果想要获得秒数,请除以 CLOCKS_PER_SEC(这是一个宏)。如果返回的进程时间不可用或其值无
法表示,则该返回值是-1。
clock()函数虽然可以很方便的获取总的进程时间,但并不能获取到单独的用户 CPU 时间和系统 CPU 时
间,在实际编程当中,根据自己的需要选择。

代码示例:

#include<stdio.h>
#include<stdlib.h>
#include<sys/times.h>
#include<unistd.h>

#define CLOCKS_PER_SEC  ((__clock_t) 1000000)
int clock();
int main(int argc ,char *agrv[])
{

 
   struct      tms     t_buf_start;
    struct      tms     t_buf_end;


    clock_t     t_start; 
    clock_t     t_end;
    long    tck;
    int     i , j;
    /* 开始时间 */
    t_start = clock();
    if (-1 == t_start)
    exit(-1);
    /* *****需要进行测试的代码段***** */
    for (i = 0; i < 20000; i++)
    for (j = 0; j < 20000; j++)
    ;
    /* *************end************** */
    /* 结束时间 */
    t_end = clock();
    if (-1 == t_end)
    exit(-1);
    /* 打印时间 */
printf("总的 CPU 时间: %f\n", (t_end - t_start) / (double)CLOCKS_PER_SEC);
exit(0);
}

运行结果:

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐