如何将 ifstream 传递给线程?

How can you pass an ifstream to thread?

我正在尝试在我的程序中实现多线程。我正在尝试在一个线程中创建我的目录搜索器 运行,然后加入该函数的其余部分。

文件线程函数搜索我的目录并找到每个文件,我试图在我的 main() 函数中的文件 reader 部分中使用它。

我应该如何将 ifstream 路径传递给线程?经过大量谷歌搜索后,由于它是如此具体,我离找到答案还差得很远。

void file_thread(std::ifstream& file){
    //open csv file for reading
    std::string path = "path/to/csv";
    for (const auto & f : std::filesystem::directory_iterator(path)){
        std::ifstream file(f.path());
    }
}

int main(){
    std::ifstream file;
        
    std::thread test(file_thread, file);
        
    //if csv is successfully open
    if(file.is_open()) 
    {
        ...
    }
    ...
}

我怀疑你真的想要这个,尽管你还不清楚你为什么要使用一个单独的线程

void file_thread(std::ifstream& file){
    //open csv file for reading
    std::string path = "path/to/csv";
    file.open(path);
}

如果那是路径,为什么要遍历目录

如果您在单独的线程中调用此代码仍然无济于事,因为 main 不会等待。为什么不正常打电话?

std::thread test(file_thread, file);
// the line below will run before file_thread finishes
// thats the whole point of threads

if(file.is_open()) 
{
    ...
}

就这样

file_thread(file);
    
//if csv is successfully open
if(file.is_open()) 
{
    ...
}