pthread条件支持CLOCK_TAI

时间:2016-03-24 22:55:22

标签: c time linux-kernel pthreads posix

我必须遗漏一些东西。我可以使用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设备上都会发生这种情况。

非常感谢任何想法或帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

根据手册页,pthread_condattr_setclock()仅接受一组有限的时钟ID值。 CLOCK_TAI不是其中之一。手册页讨论了系统时钟,听起来有点模棱两可。 CLOCK_REALTIMECLOCK_MONOTONIC及其派生词应为可接受的值。