pthread_cond_timedwait返回EINVAL

来源:互联网 发布:c语言心形图案代码 编辑:程序博客网 时间:2024/06/06 21:38

最近发现程序的business.wait(100); 使用起来造成cpu负载很高

代码如下:

    struct timespec delay;    if ( !clock_gettime(CLOCK_REALTIME,&delay) )    {        delay.tv_sec += (int)(waitmillsseconds / 1000);        delay.tv_nsec += (waitmillsseconds % 1000)*1000000;    }    int err = pthread_cond_timedwait(&cond, &lock, &delay); // err会一直返回EINVAL

后来打印发现出现错误时:

clock_gettime tv_sec=1409711645, tv_nsec=1087094042; // 这里面的tv_nsec的值超过了10的9次方  也就是超过了1秒errno 22 is EINVAL

后来修改:

    delay.tv_sec += (int)(waitmillsseconds / 1000);    delay.tv_nsec += (waitmillsseconds % 1000)*1000000;    if (delay.tv_nsec > 1000000000) {delay.tv_sec += 1;delay.tv_nsec -= 1000000000;    }
这样修改后就没有问题了

0 0
原创粉丝点击