如果读取文件超过5分钟则停止(C ++ std :: ifstream)

时间:2018-05-08 19:15:21

标签: c++

我没有自己的代码,因为我甚至不知道如何开始,抱歉。我找不到关于std::ifstream文件读取以及如何实现计时器的任何信息。

我想阅读一系列电影,如果阅读此文件的时间超过5分钟,我希望它停止,std::cout需要花费太长时间。如何在std::fstream中实现计时器?

2 个答案:

答案 0 :(得分:1)

您可以使用std::async。它返回一个future对象,您可以wait_for指定最大时间间隔。

std::ifstream file;
auto f = std::async(std::launch::async, [&file]{ file.open("path/to/file"); });

auto status = future.wait_for(std::chrono::minutes(5));
if (status == std::future_status::timeout) {
    std::cout << "timeout\n";
    return 1;
} 

std::launch::async表示将使用新线程。

答案 1 :(得分:1)

考虑在没有计时器的情况下解决问题。

首先记录当前时间。然后按块读取文件块(即不是在单个调用中,而是使用读取其中一部分的循环)。对于每个块,处理它然后检查相对于开始的经过时间。如果它超过你的门槛,就纾困。

在伪代码中:

t0 = time();
for (;;) {
    chunk = read();
    if (eof)
        success();

    process(chunk);

    t = time();
    if (t - t0 > timeout)
        error();
}