c语言中的usleep函数、,usleep()在C中实现为忙等待吗?

这篇博客介绍了如何使用nanosleep函数在C语言中实现可靠的延迟,即使在信号中断的情况下也能保证延迟时间。作者提供了一个简单包装器的示例,该包装器在被信号中断时能存储并重新计算剩余的睡眠时间,确保延迟的准确性。同时提到了条件变量和pthread_cond_timedwait作为在需要更复杂唤醒机制时的选择。
摘要由CSDN通过智能技术生成

Brian McFarl..

6

请注意,usleep()和nanosleep()都可以被信号中断.nanosleep()允许您传入额外的timespec指针,如果发生这种情况,将存储剩余时间.因此,如果你真的需要保证你的延迟时间,你可能想要围绕nanosleep()编写一个简单的包装器.

请注意,这没有经过测试,但有以下几点:

int myNanoSleep(time_t sec, long nanosec)

{

/* Setup timespec */

struct timespec req;

req.tv_sec = sec;

req.tv_nsec = nanosec;

/* Loop until we've slept long enough */

do

{

/* Store remainder back on top of the original required time */

if( 0 != nanosleep( &req, &req ) )

{

/* If any error other than a signal interrupt occurs, return an error */

if(errno != EINTR)

return -1;

}

else

{

/* nanosleep succeeded, so exit the loop */

break;

}

} while( req.tv_sec > 0 || req.tv_nsec > 0 )

return 0; /* Return success */

}

如果您需要将线程唤醒除了定期超时之外的其他内容,请查看条件变量和pthread_cond_timedwait().

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值