您尚未登录。

楼主 # 2023-02-24 16:47:33

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,207
积分: 1143.5

socketcan如何设为非阻塞接收?

在qt线程里进行socketcan::read(),发现在这里死等了。

去网上搜socketcan非阻塞接收,搜到这个:
https://blog.csdn.net/qq_32419593/article/details/119729266
主要是这句:

fcntl(can1Socket, F_SETFL, FNDELAY);

发现接收线程里调用recv()时会有警告:

socketcan  read:: Resource temporarily unavailable 

搜相关含义,说是在非阻塞模式下,使用了阻塞操作。
那么,就是说阻塞模式下,不能用read()函数了?
那用什么函数呢?select?

又搜到一个帖子:
https://cloud.tencent.com/developer/ask/sof/999494
像是机翻的外国帖子。
里面没用fcntl()那个函数,而是用如下语句:

canfd_enabled = 1;
error_code = setsockopt(socketNum, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &canfd_enabled, sizeof(int));

加进去试了,倒是不会阻塞在接收线程里,可发现程序主要在主线程里走,接收线程里的qDebug()无输出了...

离线

楼主 #1 2023-02-24 17:27:35

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,207
积分: 1143.5

Re: socketcan如何设为非阻塞接收?

可能之前想错了,接收线程read( )死等没问题,不影响主线程进行就可以。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn