我一定错过了什么。我可以使用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_REALTIMECLOCK_MONOTONIC及其衍生物应为可接受值。

09-27 01:51