我必须遗漏一些东西。我可以使用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系统和带有从Yocto构建的操作系统的嵌入式ARM设备上都会发生这种情况。
非常感谢任何想法或帮助。提前谢谢。
答案 0 :(得分:1)
根据手册页,pthread_condattr_setclock()
仅接受一组有限的时钟ID值。 CLOCK_TAI
不是其中之一。手册页讨论了系统时钟,听起来有点模棱两可。 CLOCK_REALTIME
,CLOCK_MONOTONIC
及其派生词应为可接受的值。