楼主

[视觉算法] 【求助帖】tx2上开线程读图变慢的问题

[复制链接]
梯队队员OldVincent
2021-1-25 20:09:37 显示全部楼层
  1. task1.join()
复制代码
会阻塞你当前的调用线程,直到task1执行完毕。这也就是说,如果你在主线程中thread task1;后直接调用它的join方法,相当于没有开启多线程
在这里提一下C++里多线程的知识:std::thread类在构造时就会创建一条线程并立即开始执行,并且该对象会一直处于与线程的绑定状态,直到join方法被调用或者detach方法被调用。

调用join方法,会要求调用该方法的线程等待该线程对象对应的线程执行完毕,才会继续向下执行,如果线程已经结束,则join方法会直接返回,主线程直接向下继续执行;如果调用detach方法,则会要求线程对象与线程分离

但是为什么要分离线程对象与线程呢?这是因为,如果线程尚未停止,但线程对象却已经析构,这个线程就会在事实上失去控制,就如同没有指针指向其的内存一样,会导致未定义行为,一般编译器编译出的程序的行为是直接停止。

所以,多线程的正确使用方式是:

1. 构造线程对象,这个时候子线程就会开始执行;
2. 主线程继续构造子线程对象,或者执行一些其他的操作;
3. 当主线程操作完成时,或者主线程需要用到子线程的操作结果时,调用子线程的join方法;
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

触屏版 | 电脑版

Copyright © 2024 RoboMasters 版权所有 备案号 粤ICP备2022092332号

快速回复 返回顶部 返回列表