Linux系统中的延时

内核延时

如果是短延时,比如不超过几毫秒,可以用下面的方式,比如最小1ms;因为软件定时器一般用于长延时。

1.下面这三个是忙等待,比较精确

include <linux/delay.h> 
void ndelay(unsigned long nsecs);         //纳秒
void udelay(unsigned long usecs);         //微秒
void mdelay(unsigned long msecs);         //毫秒

2.下面的函数会引起休眠,没上面的函数准确。

void msleep(unsigned int msecs)                           //毫秒延时
unsigned long msleep_interruptible(unsigned int msecs)    //毫秒可中断延时
void ssleep(unsigned int seconds)                         //秒级延时,基于msleep()

应用延时

1.sleep()和usleep() 延时

#include <unistd.h>
unsigned int sleep (unsigned int seconds); //n秒
int usleep (useconds_t usec); 					//n微秒

Linux中并没有提供系统调用sleep(),sleep()是在库函数中实现的,它是通过调用alarm()来设定报警时间,调用sigsuspend()将进程挂起在信号SIGALARM上。

2.采用select()函数来进行精确延时

#include <stdio.h>
#include <sys/select.h>
static void sleep_ms(unsigned int secs)
{
	struct timeval tval;
    tval.tv_sec=secs/1000;
    tval.tv_usec=(secs*1000)%1000000;
    select(0,NULL,NULL,NULL,&tval);
}

比如说延时0.2s:
sleep_ms(200)

3.可以用系统调用nanosleep()更精确

int nanosleep(const struct timespec *req,struct timespec *rem);
struct timespec
 {
    time_t  tv_sec;         /* seconds */
	long    tv_nsec;        /* nanoseconds */
 }
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值