gpt4 book ai didi

c++ - 如何让一个函数同时运行多次?

转载 作者:太空宇宙 更新时间:2023-11-03 22:25:05 25 4
gpt4 key购买 nike

我有以下代码作为我的主要功能:

int main(int argc,char** argv)
{
CommandLineParser cmd(argc,argv,keys);
if (cmd.has("help")) {
cmd.about("");
cmd.printMessage();
return 0;
}
String alphaFile = cmd.get<String>("alpha");
String betaFile = cmd.get<String>("beta");
String gammaFile = cmd.get<String>("gamma");
String deltaFile = cmd.get<String>("delta");
int featureToUse = cmd.get<int>("feature");
int classifier = cmd.get<int>("classifier");

runOnSingleCamera(alphaFile, featureToUse, classifier);
runOnSingleCamera(betaFile, featureToUse, classifier);
runOnSingleCamera(gammaFile, featureToUse, classifier);
runOnSingleCamera(deltaFile, featureToUse, classifier);

return 0;
}

runOnSingleCamera 是我的其他功能之一,每次调用都会在不同的视频文件上运行相同的内容。该代码需要在所有视频文件上同时运行并访问同一个全局数组。

这样做的最佳方法是什么?

如果解决方案是多线程,请告知我的 cmake 文件中应包含哪些内容,因为我已经对此进行了试验但无法使其工作。

最佳答案

这个怎么样:

int main(int argc,char** argv)
{
CommandLineParser cmd(argc,argv,keys);
if (cmd.has("help")) {
cmd.about("");
cmd.printMessage();
return 0;
}
String alphaFile = cmd.get<String>("alpha");
String betaFile = cmd.get<String>("beta");
String gammaFile = cmd.get<String>("gamma");
String deltaFile = cmd.get<String>("delta");
int featureToUse = cmd.get<int>("feature");
int classifier = cmd.get<int>("classifier");

std::thread t1(runOnSingleCamera, alphaFile, featureToUse, classifier);
std::thread t2(runOnSingleCamera, betaFile, featureToUse, classifier);
std::thread t3(runOnSingleCamera, gammaFile, featureToUse, classifier);
std::thread t4(runOnSingleCamera, deltaFile, featureToUse, classifier);

t1.join();
t2.join();
t3.join();
t4.join();

return 0;
}

多线程虽然不是玩具。如果这里的一切都是独立的,那么这就可以了。如果变量以某种方式相互依赖,则必须小心。

如果您的数组是只读的,那么这没问题。如果你的数组需要被所有线程修改,那么这是一个销毁方法。再次强调,要非常小心线程间的共享变量。这是一个很大的话题。了解 race-conditions .

请注意,一切都是按值传递的;即,所有内容都被复制到您的函数中(即使您的函数通过引用获取内容)。您应该使用 std::ref() 通过引用传递。阅读更多关于 std::thread here 的信息.

关于c++ - 如何让一个函数同时运行多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42999773/

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