【发布时间】:2016-06-21 08:40:19
【问题描述】:
我正在使用安卓应用(IP 网络摄像头)作为网络摄像头。 我在单独的线程中运行下面的代码。因为如果我在主线程中运行它会使程序崩溃。
VideoCapture cap; Mat img;
cap.open("http://192.168.0.101:8080/video?x.mjpeg");
while(waitKey(33)!=27)
{
try{
cap>>img;
cout<<"Thread active"<<endl;
if(img.empty())
{
cout<<"camera Closed"<<endl;
break;
}
imshow("Video",img);
} catch(...{}
}
一切正常。即使我关闭相机(关闭安卓应用程序),它也会在控制台中打印“相机关闭”。 当我在我的安卓设备上关闭 wifi 时会出现问题。 在我直接关闭 wifi 的那一刻(应用程序仍在运行)线程冻结,即使它在 try catch 块中!
我的表单中有一个 button_click 事件,我在其中调用cap.release();。
如果我单击此按钮,则在 Visual Studio 中显示以下错误(opencv 没有错误)
HEAP[Test.exe]:HEAP:空闲堆块 6797780 修改于 67977d4 被释放后 Windows 已触发断点 测试.exe。
这可能是由于堆损坏,这表明存在错误 Test.exe 或它已加载的任何 DLL。
这也可能是由于用户在 Test.exe 获得焦点时按 F12。
输出窗口可能有更多的诊断信息。
有人遇到过这个错误吗?
Visual Studio 调试器停止在 cap.release(); 行
有没有办法克服这个问题?
感谢和问候
P.S:我正在使用 Visual Studio 2013 和 opencv 3.0 [C++/Cli (winforms)]
更新: 我在 button_clickEvent 中添加了thread->Abort();(替换了cap.release();)。程序也因 thread->Abort() 而崩溃;
有没有更安全的方法来终止线程?
我认为这是 OpenCV 中的一个错误,是否有解决方法?
【问题讨论】:
标签: c++ winforms visual-studio opencv c++-cli