最近发现程序的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;
}
这样修改后就没有问题了