cpp为什么boost :: thread inside for循环不迭代所有值并且正在推送相同的值?

时间:2017-08-12 22:25:39

标签: c++ multithreading bash boost

我正在尝试使用boost::thread并行地在command line上运行bash脚本。

bash脚本将args值写入日志文件。

for (unsigned int i = 0; i < count; i++) {
    std::string nIndexLine = nIndex[i].line;
    boost::thread z(CommandLineRun, nIndexLine);
}


void CommandLineRun(const std::string& Command)
{
    int systemRet = system(Command.c_str());

    if(systemRet == -1){
        // The system method failed
    }
}               

上面的代码有效,但我在same entries multiple times中看到了log file。 。例如。如果nIndex有500 values,那么nIndex[0]的值会在log file中写入500次。

所以imho for循环不会遍历所有条目。但如果我删除boost::thread,那么for循环正在按预期工作。

我做错了什么?

我不想从命令行输出任何内容,我只是希望它在命令行上运行命令。并且不要再烦恼了。

更新:结果

boost::raplce_all导致问题。它就在boost::thread

之前

1 个答案:

答案 0 :(得分:1)

您的image(var.y) 函数接收对可能已更改的字符串的引用,甚至在实际调用该函数时消失。

你应该试试这个:

CommandLineRun()