gpt4 book ai didi

c++ - 您应该如何在不取消的情况下处理线程中的文件打开错误?

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:47 25 4
gpt4 key购买 nike

我有一个服务应用程序,它读取一个包含要打开的文件列表的配置文件。问题是当它在目录中找不到文件时,它会抛出异常,从而取消线程并停止服务应用程序。

这是在线程中调用的函数的代码块:

FILE* file_;
ServiceApp::File::File( const char* filename, const char* mode) :
file_(fopen(filename, mode))
{
if( !file_ )
{
// throwing will stop the service when file doesn't exist, what work around could we do?
throw std::runtime_error("file open failure");
}

问题:我们如何防止这种情况发生,以便当在目录中找不到配置文件中列出的文件时,应用程序将忽略它并继续该过程?

最佳答案

我建议使用 std::async。如果通过 std::async 运行的函数抛出异常,异常将保存在 std::future 中。当您调用 std::future::get() 时,我将被重新抛出。但是,如果您不这样做,它将被“忽略”,因此您的应用程序将继续运行。

例子:

auto lambda = [] {
throw std::runtime_error("error");
};

auto handle = std::async(std::launch::async, lambda);

有关 std::async 的更多信息,请阅读 this .

关于c++ - 您应该如何在不取消的情况下处理线程中的文件打开错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087004/

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