【发布时间】:2016-09-28 08:38:05
【问题描述】:
我遇到的问题很可能与线程或互斥锁有关:
当我直接在主方法中调用自定义方法时,它会起作用并给出结果。但是,计算需要大约 900 毫秒。所以我想做一个只做这个计算并在之后显示结果的线程。
这个时候项目比较大,我尽量给出尽可能接近原始的伪代码。
更多背景信息:我从相机流式传输深度图像,并希望在此图像上使用细化算法。为此使用 OpenCV 3.1.0 和 MSVC 2015(均为 32 位)。
int main()
{
//init camera, read images etc...
Mat copyOfImage = dephtImage->clone();
applyThreadedThinning(©OfImage);
return 0;
}
这个版本运行良好。 如果我这样调用该方法:
std::thread t1(&applyThreadedThinning,©OfImage);
它说 "调试错误!
程序:.... *.exe
abort() 已被调用
(按重试调试应用程序)"
我无法想象为什么它可以在没有线程的情况下工作,但在使用线程时却不行。 调试有点复杂,我只是在每一行后面加上“step into”,然后等到它发出这个错误消息。一旦我隔离了导致此错误的代码行,我该怎么办?
【问题讨论】:
-
您是否尝试过点击“重试”来调试应用程序?然后看看堆栈跟踪?
-
如果我点击“重试”,它会在方法“static bool __cdecl issue_debug_notification(wchar_t const* const message) throw()”处停止。堆栈跟踪是“调用堆栈”?
-
那么您需要检查以前的功能。如果您在任何时候处于 std::thread 的析构函数中,那么已经在这里的答案解释了为什么会发生这种情况。
标签: c++ multithreading opencv