我正在寻找编写一些代码来监视文件。当它写到时,我想阅读新行并对其进行操作。
所以我找到了这个线程: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上运行)?
我还没有编写任何代码,因为我什至不确定最好的起点在哪里。
答案 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));