从ip摄像机创建和打开视频捕获大约需要2秒钟。 我想打开10个以上的视频捕获,为了获得更好的性能,我想通过在不同线程中创建视频捕获来完成这项工作。 但是视频捕获是按顺序创建的。
我看到了opencv的源代码,并在opencv在 backend_plugin.cpp 文件中创建捕获时发现了这种代码安全性。
void initBackend()
{
AutoLock lock(getInitializationMutex());
try {
if (!initialized)
loadPlugin();
}
此代码是否阻止我的代码被并发? 还是我有一个错误?
我使用了std :: thread和std :: future,但是结果是相同的。
vector<VideoCapture> captureList;
std::vector<std::thread> threads;
for (auto &it : urlList) {
string url = it;
threads.push_back(thread([](string url) {
cout << "*********** : " << url << endl;
VideoCapture& cap = VideoCapture(url);
captureList.push_back(cap);
}, it));
}
for (auto& thread : threads) {
thread.join();
}
我该怎么做?