头文件
- #include
- #include
- #include
select系统调用
- int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
- struct timeval *timeout);
其中readfds、writefds、exceptfds分别是被select()监视的读、写和异常处理的文件描述符集合,numfds的值是需要检查的号码最高的fd加1。readfds文件集中的任何一个文件变得可读,select()返回;同理,writefds文件集中的任何一个文件变得可写,select也返回。
timeout参数表示设置超时,如果设置超时一秒
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
- struct timeval time;
- time.tv_sec = 1;
- time.tv_usec = 0;
使用select函数可以实现一个毫秒级别的延时函数
- void delay_ms(int ms)
- {
- struct timeval delay;
- delay.tv_sec = 0;
- delay.tv_usec = ms * 1000; // ms
- select(0, NULL, NULL, NULL, &delay);
- }
当然也可以实现一个微秒级别的延时函数
- void delay_ms(int us)
- {
- struct timeval delay;
- delay.tv_sec = 0;
- delay.tv_usec = us; // us
- select(0, NULL, NULL, NULL, &delay);
- }
当然也还可以实现秒级,这个就有点鸡肋了,算是凑数吧。
- void delay_s(int s)
- {
- struct timeval delay;
- delay.tv_sec = s;
- delay.tv_usec = 0;
- select(0, NULL, NULL, NULL, &delay);
- }