#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <fcntl.h>
#include <assert.h>
#include <sys/wait.h>
#include <sys/acct.h>
#include <errno.h>
#include <sys/times.h>
#include <pthread.h>
#include <signal.h>
/*
CLOCK_REALTIME // 实时系统时间
CLOCK_MONONIC // 不带负跳数的实时系统时间
CLOCK_PROCESS_CPUTIME_ID // 调用进程的CPU时间
CLOCK_THREAD_CPUTIME_ID // 调用线程的CPU时间
*/
void print_clkid(clockid_t id)
{
switch(id)
{
case CLOCK_REALTIME:
printf("id = CLOCK_REALTIME\n");
printf("CLOCK_REALTIME = %d\n",CLOCK_REALTIME);
break;
case CLOCK_MONOTONIC:
printf("id = CLOCK_MONOTONIC\n");
printf("CLOCK_MONOTONIC = %d\n",CLOCK_MONOTONIC);
break;
case CLOCK_PROCESS_CPUTIME_ID:
printf("id = CLOCK_PROCESS_CPUTIME_ID\n");
printf("CLOCK_PROCESS_CPUTIME_ID = %d\n",CLOCK_PROCESS_CPUTIME_ID);
break;
case CLOCK_THREAD_CPUTIME_ID:
printf("id = CLOCK_THREAD_CPUTIME_ID\n");
printf("CLOCK_THREAD_CPUTIME_ID = %d\n",CLOCK_THREAD_CPUTIME_ID);
break;
default:
printf("clkid undefined\n");
break;
}
return;
}
int main()
{
pthread_condattr_t attr;
clockid_t clkid;
/*条件变量属性初始化,设置属性前先初始化*/
pthread_condattr_init(&attr);
/*获取默认时钟属性*/
pthread_condattr_getclock(&attr, &clkid);
print_clkid(clkid);// CLOCK_REALTIME
/*时钟时钟属性*/
if (0 != pthread_condattr_setclock(&attr, CLOCK_REALTIME)) // 实时系统时间
printf("ERROR:set CLOCK_REALTIME\n");
pthread_condattr_getclock(&attr, &clkid);
print_clkid(clkid); // CLOCK_REALTIME
/*时钟时钟属性*/
if (0 != pthread_condattr_setclock(&attr, CLOCK_MONOTONIC)) // 不带负跳数的实时系统时间
printf("ERROR:set CLOCK_MONOTONIC\n"); // ERROR:set CLOCK_MONOTONIC
pthread_condattr_getclock(&attr, &clkid);
print_clkid(clkid); // CLOCK_MONOTONIC
/*时钟时钟属性*/
if(0 != pthread_condattr_setclock(&attr, CLOCK_PROCESS_CPUTIME_ID)) // 调用进程的CPU时间
printf("ERROR:set CLOCK_PROCESS_CPUTIME_ID\n");
pthread_condattr_getclock(&attr, &clkid);
print_clkid(clkid); // CLOCK_MONOTONIC
/*时钟时钟属性*/
if(0 != pthread_condattr_setclock(&attr, CLOCK_THREAD_CPUTIME_ID)) // 调用线程的CPU时间
printf("ERROR:set CLOCK_THREAD_CPUTIME_ID\n");
pthread_condattr_getclock(&attr, &clkid);
print_clkid(clkid); // CLOCK_MONOTONIC
return 0;
}
/*gcc cond4.c -o cond4 -lpthread*/
测试结果: