首先,我不是线程专家所以如果我的代码中有一个非常明显的错误,请更正它而不是开玩笑。
我有一个对象向量,每个对象都有自己的初始化参数。我想要实现的是使用不同的参数调用每个对象的相同功能(所有内容都存储在结构向量中)。我想,做到以下几点就可以实现它:
vector<thread> vThreads;
for (int k = 0; k < vObjs.size(); k++)
{
vThreads.push_back(std::thread(&CEllipseDetector::Detect, vObjs[k].objYaed, vObjs[k].gray.clone(), vObjs[k].ellipses));
}
EllipseDetector是类名,我试图调用它的函数Detect并传递两个参数gray.clone()和省略号。
现在我假设一旦我做了这些线程,他们就会开始执行,但他们不会。检查资源监视器,确实创建了线程但是他们(或者我应该只说其中一个)只在我编写以下内容时才开始执行:
for (int k = 0; k < vThreads.size(); k++)
{
vThreads[k].join();
//Some other stuff here//
}
我希望实现的是,在第一个循环中,所有线程将独立地开始执行,并且在第二个循环中,我将在它们完成执行时逐个捕获它们。对它们进行一些后期处理对象,那就是......
但发生的事情是,只要它遇到第一次加入呼叫,只有所有线程一个接一个地开始执行。
我希望我明白我的问题&#34;使用线程同时调用该函数,然后知道他们何时完成执行以进行一些后期处理。也许,就像一个回调函数?
最后一件事:如果我使用.detach而不是join,那么所有线程都会同时运行并一起完成,但问题是我无法进行后期处理。