for (int i = 0; gc_handDataOutput->QueryNumberOfHands(); ++i)

来源:互联网 发布:软件小品官网 编辑:程序博客网 时间:2024/06/05 08:05

逗比的坑——for (int i = 0; gc_handDataOutput->QueryNumberOfHands(); ++i)

情景描述

使用C++ 开发Intel RealSense应用,逻辑写完之后,添加界面,使用Qt开发界面。

我的应用里面使用了生产者消费者模型,协作两个线程,一个线程获取3D摄像头的数据,一个线程通过socket将数据发送送出去。

发现Qt有自己的线程类QThread,用于同步的信号量类QSemaphore,抛弃了之前使用Win32 API的实现,以面向对象的方式重写了一遍,测试时候发现,刚启动时候一切运行正常,一伸手界面就冻住了

原因猜测

  • 生产者消费者模型写错,造成死锁: 加断点调试,反复检查,发现没问题
  • QT的QThread类,QSemaphore类写得有问题,不适合Intel
    的SDK,因为Intel的SDK用了并行之类的优化,每次调试的输出信息都显示20多个线程退出:重新用Win32的API还是同样的问题,一伸手就死掉
  • socket传输部分写错了,阻塞:加断点调试,并没有错。。。

最后解决

实在没办法,代码只有几百行,于是就和之前正常的一行行的比对,竟然还是没发现!!!
然后一段一段的替换,用能跑的替换不能跑的,最终定位到了问题

这里写图片描述

循环的条件那儿,只要是>0的数,都尼玛直接死循环了

3 0
原创粉丝点击