从不断增长的文本文件C ++中实时读取

时间:2018-02-16 16:46:48

标签: c++ visual-studio ifstream

我查看了有关实时阅读文本文件的所有答案,但似乎都没有。 在我的程序1中,有一个不断增长的文本文件由硬件写入,它提供两个坐标(两列)。 在程序2中,我想实时读取这些坐标并将另一个硬件移动到正在写入的坐标。 最大的问题是我希望以最短的延迟(低于50毫秒)工作。 我尝试过notepad ++,但它的刷新率是3秒,这太过分了。 谁能告诉我怎么做呢?

2 个答案:

答案 0 :(得分:0)

您最快的反应是直接轮询(直接读取硬件)或让硬件创建调用程序的事件(中断)。

写入文件需要时间。操作系统必须在硬盘上找空间,写入硬盘;更不用说提升电机旋转硬盘所需的时间。

写入内存要快得多。一种更有效的方法是让H / W写入内存而不是文件。或者,内存映射文件或RAM驱动器将是下一个最佳选择。

还要记住Windows不是实时操作系统。您的系统中的其他任务将被换出并执行。这需要时间远离您的“实时”要求。您可能希望研究Windows以查看是否存在允许您的程序独占访问处理器的API(或使您的程序具有非常高的优先级)。

研究“Windows驱动程序”,编写可以为您的H / W提供服务并实时执行活动的代码。

答案 1 :(得分:0)

我试过了:

int main()

{     std :: ifstream ifs(" file.txt");

if (ifs.is_open())
{
    std::string line;
    while (true)
    {
        while (std::getline(ifs, line)) std::cout << line << "\n";
        if (!ifs.eof()) break; 
        ifs.clear();


    }
}

return 0;

}

但它会一直读到最后,当我向我的文本文件中添加更多值时,它并没有读到它。但是当我刷新文件时,我在控制台上获得了o / p。

我也尝试过使用tellg和seekg,但这也没有帮助。