使用select实现延时功能
在 Linux 中,可以使用 select
函数结合文件描述符(File Descriptor)的特性来实现延时功能。以下是一个使用 select
函数实现延时的简单示例:
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
struct timeval tv;
// 设置延时时间为 2 秒
int delaySec = 2;
// 计算延时时间的秒数和微秒数
tv.tv_sec = delaySec;
tv.tv_usec = 0;
// 使用 select 函数实现延时
select(0, NULL, NULL, NULL, &tv);
// 在延时结束后执行的代码
printf("延时 %d 秒结束\n", delaySec);
return 0;
}
在上述示例代码中,我们通过 select(0, NULL, NULL, NULL, &tv)
的方式来进行延时,其中 &tv
是传入的超时时间参数。select
函数会阻塞程序执行,直到指定的时间到达或有其他事件发生。
编译并运行上述示例代码后,将会进行 2 秒的延时,然后输出延时结束的消息。
需要注意的是,select
函数实际上是用于 I/O 多路复用的功能,在此处我们仅利用其延时的特性来实现延时功能。
封装为一个可以根据传入参数实现定时的函数
void delay_ms(int xms)
{
struct timeval delay;
delay.tv_sec = 0;
delay.tv_usec = xms*1000;
//延时
select(0, NULL, NULL, NULL, &delay);
}