逗比的坑——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的数,都尼玛直接死循环了