在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()无输出了...
离线
可能之前想错了,接收线程read( )死等没问题,不影响主线程进行就可以。
离线