linux下使用select函数达到延时效果

为了解决主线程外开启的CAN通信数据接收线程CPU占用过高和数据接收不稳定的问题,博主选择了使用select函数进行延时。相比sleep()和usleep(),select函数能提供更精确的微秒级延时,尽管存在约1ms的误差。在使用select时应注意初始化tv_sec在tv_usec之前,延时时间是tv_sec和tv_usec之和,且每次select后需重新设置tv_usec。博主将select延时功能封装到类中以便复用。
摘要由CSDN通过智能技术生成

我为什么要使用select函数延时呢,是因为我在主线程外又开了两个线程来接收CAN通信的数据,线程里面用的while死循环,但是发现can接收的数据很不正常,经常是一段时间收不到,一段时间收到很多,而且很小的程序cpu占用率很高,有大佬说可能是主线程的死循环一直在运行,导致其他进程没有机会插入,所以需要在死循环里加入一段小延时。
使用sleep()和usleep()的确可以达到效果,但是使用这类延时可能会导致系统产生未知问题,所以使用了select函数,而且select的延时作用精度足够高,可以达到微秒级(但是实际使用发现有1ms左右的延时,不知道什么原因,但对我影响不大)
select函数的使用也足够简单 只需要几行代码

#include“time.h”
#include "sys/select.h"//必须调用这俩头文件

struct timeval tv;//声明一个timeval类型的对象tv
tv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值