有没有办法等待用纯c ++写入文件?

时间:2018-08-15 06:19:32

标签: c++ file c++11 wait

我正在寻找编写一些代码来监视文件。当它写到时,我想阅读新行并对其进行操作。

所以我找到了这个线程:how-to-read-a-growing-text-file-in-c,它向我展示了如何执行此操作。

但是,这有点“轮询”方法。为方便起见,这是代码段。 注意:这不是我的工作(其链接中的答案):

#include <iostream>
#include <string>
#include <fstream>

int main()
{
    std::ifstream ifs("test.log");

    if (ifs.is_open())
    {
        std::string line;
        while (true)
        {
            while (std::getline(ifs, line)) std::cout << line << "\n";
            if (!ifs.eof()) break; // Ensure end of read was EOF.
            ifs.clear();

            // You may want a sleep in here to avoid
            // being a CPU hog.
        }
    }

    return 0;
}

您会看到有评论:You may want a sleep in here to avoid being a CPU hog.

是否有一种方法(可能没有)等待文件写入,从而使某些事件/条件触发我们的线程唤醒?我正在按照类似函数select()的思路进行思考……但我真的希望它是纯c ++。

失败了-是否有一种非纯c ++方式(对我来说,我要求它也可以在Linux OS和Windows上运行)?

我还没有编写任何代码,因为我什至不确定最好的起点在哪里。

1 个答案:

答案 0 :(得分:0)

您只需要添加可在Win和Linux上运行的睡眠功能,即可使用它def _inverted_res_block(inputs, expansion, stride, alpha, filters, block_id, skip_connection, rate=1): in_channels = inputs._keras_shape[-1] #in_channels = inputs.get_shape()[-1].value #in_channels = tf.shape(inputs)[-1] import pdb;pdb.set_trace() pointwise_conv_filters = int(filters * alpha) pointwise_filters = _make_divisible(pointwise_conv_filters, 8) x = inputs prefix = 'expanded_conv_{}_'.format(block_id) if block_id: # Expand x = Conv2D(expansion * in_channels, kernel_size=1, padding='same', use_bias=False, activation=None, name=prefix + 'expand')(x) 在您的代码中。它来自标准库,因此您可以在Linux或Windows上使用它。

std::this_thread::sleep_for(std::chrono::milliseconds(500));