我一定错过了什么。我可以使用CLOCK-gettime获得CLOCK-TAI。然而,当我试图使用带有pthread条件的CLOCK_TAI时,我得到了一个EINVAL。
#include <pthread.h>
#include <stdio.h>
int main()
{
clockid_t clockTai = 11;
pthread_cond_t condition;
pthread_condattr_t eventConditionAttributes;
pthread_condattr_init( &eventConditionAttributes );
int ret = pthread_condattr_setclock( &eventConditionAttributes, clockTai );
printf( "%d %d\n", ret, clockTai );
pthread_cond_init( &condition,
&eventConditionAttributes );
return( 0 );
}
按以下方式编译时,将生成以下输出:
g++ -o taiTest taiTest.cxx -lpthread -lrt
./taitest$ ./taiTest
22 11
其中,EINVAL=22,CLOCK_TAI=11。
这在我的Ubuntu 14.04系统和我的嵌入式ARM设备上都会发生,我的操作系统是由Yocto构建的。
我们非常感谢您的任何想法或帮助。提前谢谢。
最佳答案
根据手册页,pthread_condattr_setclock()
只接受一组有限的时钟id值。CLOCK_TAI
不是其中之一。手册中提到的系统时钟听起来确实有些模棱两可。CLOCK_REALTIME
、CLOCK_MONOTONIC
及其衍生物应为可接受值。