2012年12月5日水曜日

タイマ時間

***
*
* gcc -Wall -lrt -o clock clock.c
*
***/
/***
Linux mtlx02 2.6.18-128.el5 #1 SMP Wed Dec 17 09:03:25 PM EST 2008 x86_64 x86_64 x86_64 GNU/Linux
clock=0 sec=0 nsec=999848 分解能約1ms CLOCK_REALTIME
clock=1 sec=0 nsec=999848 分解能約1ms CLOCK_MONOTONIC
clock=2 sec=0 nsec=1 分解能1ns CLOCK_PROCESS_CPUTIME_ID (TSC)
clock=3 sec=0 nsec=1 分解能1ns CLOCK_THREAD_CPUTIME_ID (TSC)
***/
#include <stdio.h>
#include <time.h>

int main()
{
clockid_t clocks[] = {
CLOCK_REALTIME, /* システム全体の実時間(real time、wall time) */
CLOCK_MONOTONIC, /* 任意の時点からの経過時間 */
CLOCK_PROCESS_CPUTIME_ID, /* プロセス毎に使用可能なCPUが備える高分解能の時計 */
CLOCK_THREAD_CPUTIME_ID, /* プロセス毎の時計と同じだが、スレッド毎に使用可能 */
(clockid_t) -1
};

char *clocksStr[] = {
"CLOCK_REALTIME", /* システム全体の実時間(real time、wall time) */
"CLOCK_MONOTONIC", /* 任意の時点からのけ化時間 */
"CLOCK_PROCESS_CPUTIME_ID", /* プロセス毎に使用可能なCPUが備える高分解能の時計 */
"CLOCK_THREAD_CPUTIME_ID", /* プロセス毎の時計と同じだが、スレッド毎に使用可能 */
""
};

int w_i;


/* 分解能表示 */
printf("clock_getres\n");
for(w_i=0; clocks[w_i]!=(clockid_t) -1; w_i++) {
struct timespec res;
int ret;

ret = clock_getres(clocks[w_i], &res);
if(ret) {
perror("clock_getres");
} else {
printf("%30s : clock=%d sec=%ld nsec=%ld\n",
clocksStr[w_i],
clocks[w_i], res.tv_sec, res.tv_nsec);
}
} /*for(w_i)*/

/* 現在時刻表示 */
printf("clock_gettime\n");
for(w_i=0; clocks[w_i]!=(clockid_t) -1; w_i++) {
struct timespec res;
int ret;

ret = clock_gettime(clocks[w_i], &res);
if(ret) {
perror("clock_getres");
} else {
printf("%30s : clock=%d sec=%ld nsec=%ld\n",
clocksStr[w_i],
clocks[w_i], res.tv_sec, res.tv_nsec);
}
} /*for(w_i)*/

return 0;
}



0 件のコメント:

コメントを投稿