gpt4 book ai didi

c++ - 除非在调试器中逐步执行,否则函数调用会导致 C++ 程序卡住

转载 作者:行者123 更新时间:2023-11-30 04:15:08 24 4
gpt4 key购买 nike

我有这个简短的 C++ 程序,它循环从相机中获取快照图像并显示它们:

void GenericPGRTest::execute()
{
// connect camera
Camera *cam = Camera::Connect();

// query resolution and create view window
const Resolution res = cam->GetResolution();
cv::namedWindow("View");

c = 0;
// keep taking snapshots until escape hit
while (c != 27)
{
const uchar *buf = cam->SnapshotMono();
// create image from buffer and display it
cv::Mat image(res.height, res.width, CV_8UC1, (void*)buf);
cv::imshow("Camera", image);
c = cv::waitKey(1000);
}
}

这使用一个类 (Camera) 来控制我使用 Point Grey SDK 创建的相机控制和 OpenCV 库中的函数来显示图像。我不一定要寻找与这两个库中的任何一个的使用相关的答案,而是寻找关于如何调试一般奇怪问题的一些见解。问题是应用程序在 cam->SnapshotMono() 行卡住(不是崩溃)。当然,我用调试器运行了这个函数。内容如下:

const uchar* Camera::SnapshotMono()
{
cam_.StartCapture();
// get a frame
Image image;
cam_.RetrieveBuffer(&image);
cam_.StopCapture();

grey_buffer_.DeepCopy(&image);
return grey_buffer_.GetData();
}

现在,每次我在调试器中逐步执行函数时,一切正常。但是我第一次执行“跳过”而不是“进入”SnapshotMono() 时,砰的一声,程序卡住了。当我当时暂停它时,我注意到它卡在 SnapshotMono() 中的 RetrieveBuffer() 行。我知道这是一个阻塞调用,所以理论上它可以卡住(不知道为什么,但这是可能的),但为什么它在正常运行时阻塞而不是在调试时阻塞?这是迄今为止我在调试中看到的最奇怪的行为之一。知道为什么会发生这种情况吗?

对于那些熟悉 FlyCapture 的人来说,上面的代码不会按原样中断,而是只有当我在回调模式下使用 StartCapture(),然后用 StopCapture()< 终止它时才会中断/em> 在它之前。

使用 MSVC2010、OpenCV 2.4.5 和 PGR FlyCapture 2.4R10 编译。

最佳答案

大胆的猜测......但可能是 StartCapture 已经开始了这个过程最终在 ìmage 中拥有缓冲区,如果你离开它一些到达 RetrieveBuffer 之前的时间。如果你一次运行它,情况就不是这样了......

关于c++ - 除非在调试器中逐步执行,否则函数调用会导致 C++ 程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com