如何将 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())
{
...
}
我正在尝试在我的程序中实现多线程。我正在尝试在一个线程中创建我的目录搜索器 运行,然后加入该函数的其余部分。
文件线程函数搜索我的目录并找到每个文件,我试图在我的 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())
{
...
}