RoboMaster
标题:
【求助帖】tx2上开线程读图变慢的问题
[打印本页]
作者:
544750411
时间:
2020-11-14 19:24
标题:
【求助帖】tx2上开线程读图变慢的问题
我在tx2上跑代码不开线程一条线跑下来不判别数字,光是video.read就得14ms
想着开个线程单独跑这不时间就快了,然后开线程
thread task1()
task1.join()
结果video.read直接飙升到40ms。
想着换个摄像头
买了迈德威视的UBS31的USB2.0摄像头
他们的摄像头得用他们的API不开线程也是14ms左右
开了线程20-30ms左右
作者:
闫召庆
时间:
2020-11-14 19:36
可以可以可以
作者:
544750411
时间:
2020-11-14 19:43
闫召庆 发表于 2020-11-14 19:36
可以可以可以
帮帮忙呀兄弟们,我被折磨一个月了
作者:
OldVincent
时间:
2021-1-25 20:09
task1.join()
复制代码
会阻塞你当前的调用线程,直到
task1
执行完毕
。这也就是说,如果你在主线程中
thread task1;
后直接调用它的
join
方法,相当于
没有开启多线程
。
在这里提一下C++里多线程的知识:std::thread类在构造时就会创建一条线程并
立即开始执行
,并且该对象会一直处于与线程的绑定状态,直到
join方法
被调用或者
detach方法
被调用。
调用
join
方法,会要求调用该方法的线程等待该线程对象对应的线程执行完毕,才会继续向下执行,如果线程已经结束,则
join
方法会直接返回,主线程直接向下继续执行;如果调用
detach
方法,则会要求
线程对象与线程分离
。
但是为什么要分离线程对象与线程呢?这是因为,如果
线程尚未停止
,但
线程对象却已经析构
,这个线程就会在事实上失去控制,就如同
没有指针指向其的内存
一样,会导致未定义行为,一般编译器编译出的程序的行为是直接停止。
所以,多线程的正确使用方式是:
1. 构造线程对象,这个时候子线程就会开始执行;
2. 主线程继续构造子线程对象,或者执行一些其他的操作;
3. 当主线程操作完成时,或者主线程需要用到子线程的操作结果时,调用子线程的
join
方法;
作者:
henry_23
时间:
2021-5-21 23:58
本帖最后由 henry_23 于 2021-5-22 00:00 编辑
是不是
cv::waitKey()
、
cv::imshow()
的问题呢?感觉很玄学,好像使用过程中还是要手动停顿一下,不然太快电脑似乎反应不过来……
还有会不会是线的问题,换 USB 3.0 的试试?
欢迎光临 RoboMaster (https://bbs.robomaster.com/)
Powered by Discuz! X3.2