C 参考手册
- C 语言
- C 关键词
- 预处理器
- C 标准库头文件
- 类型支持
- 程序支持工具
- 变参数函数
- 错误处理
- 动态内存管理
- 日期和时间工具
- asctime, asctime_r, asctime_s
- ctime, ctime_r, ctime_s
- gmtime, gmtime_r, gmtime_s
- localtime, localtime_r, localtime_s
- difftime
- time
- clock
- timespec_get
- strftime
- wcsftime
- mktime
- CLOCKS_PER_SEC
- tm
- time_t
- clock_t
- timespec
- 字符串库
- 算法
- 数值
- 文件输入/输出
- 本地化支持
- 原子操作库
- 线程支持库
- 实验性 C 标准库
- 有用的资源
- 符号索引
- 注释
clock
定义于头文件 <time.h>
|
||
clock_t clock(void); |
||
返回从关联到进程开始执行的实现定义时期的起,进程所用的粗略处理器时间。将此值除以 CLOCKS_PER_SEC 可转换为秒。
只有两次对 clock 不同调用的返回值的差是有意义的,因为 clock 时期的起始不必与程序起始一致。 clock 时间或许会快于或慢于挂钟时间,这取决于操作系统给予程序的执行资源。例如,若 CPU 为其他进程所共享, clock 时间可能慢于挂钟。另一方面,若当前进程为多线程,而有更多资源可用, clock 时间可能会快于挂钟。
参数
(无)
返回值
程序迄今为止所用的处理器时间。若该信息不可用,或若其值无法表示,则为 (clock_t)(-1) 。
注解
在兼容 POSIX 的系统上,带时钟 id CLOCK_PROCESS_CPUTIME_ID 的 clock_gettime
与会表现得更好。
clock()
返回的值会在一些不遵从的实现上回卷。例如在某种实现上,若 clock_t 为有符号 32 位整数而 CLOCKS_PER_SEC 为 1000000 ,则它将在约 2147 秒(约 36 分)后回卷。
示例
此示例演示 clock() 和现实时间之差异。
运行此代码
#include <stdio.h> #include <time.h> #include <stdlib.h> #include <threads.h> // POSIX 中的 pthread.h // 函数 f() 做一些耗时的工作 int f(void* thr_data) // POSIX 中返回 void* { volatile double d = 0; for (int n=0; n<10000; ++n) for (int m=0; m<10000; ++m) d += d*n*m; return 0; } int main(void) { struct timespec ts1, tw1; // C11 与 POSIX 皆可 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts1); // POSIX clock_gettime(CLOCK_MONOTONIC, &tw1); // POSIX ;C11 中用 timespec_get clock_t t1 = clock(); thrd_t thr1, thr2; // C11 ;POSIX 中用 pthread_t thrd_create(&thr1, f, NULL); // C11 ; POSIX 中用 pthread_create thrd_create(&thr2, f, NULL); thrd_join(thr1, NULL); // C11 ; POSIX 中用 pthread_join thrd_join(thr2, NULL); struct timespec ts2, tw2; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts2); clock_gettime(CLOCK_MONOTONIC, &tw2); clock_t t2 = clock(); double dur = 1000.0*(t2-t1)/CLOCKS_PER_SEC; double posix_dur = 1000.0*ts2.tv_sec + 1e-6*ts2.tv_nsec - (1000.0*ts1.tv_sec + 1e-6*ts1.tv_nsec); double posix_wall = 1000.0*tw2.tv_sec + 1e-6*tw2.tv_nsec - (1000.0*tw1.tv_sec + 1e-6*tw1.tv_nsec); printf("CPU time used (per clock(): %.2f ms\n", dur); printf("CPU time used (per clock_gettime()): %.2f ms\n", posix_dur); printf("Wall time passed: %.2f ms\n", posix_wall); }
可能的输出:
CPU time used (per clock(): 1580.00 ms CPU time used (per clock_gettime()): 1582.76 ms Wall time passed: 792.13 ms
引用
- C11 standard (ISO/IEC 9899:2011):
- 7.27.2.1 The clock function (p: 389)
- C99 standard (ISO/IEC 9899:1999):
- 7.23.2.1 The clock function (p: 339)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.12.2.1 The clock function
参阅
(C11) |
将 struct time_t 对象转换成文本表示 (函数) |
返回纪元开始经过的当前系统日历时间 (函数) |