C++ C++;-持续读取实时日志文件的最新行

C++ C++;-持续读取实时日志文件的最新行,c++,file,io,C++,File,Io,我编写了下面的方法,它从另一个线程连续写入的日志文件中读取最新的行。此代码在不同的线程上运行,并由计时器驱动(每5秒触发一次)。这很简单。下面是它的样子: void FileManager::ReadFile() { std::vector<std::string> vecLines; std::string line; m_InputStream.clear(); while (std::getline(m_InputStream, line))

我编写了下面的方法,它从另一个线程连续写入的日志文件中读取最新的行。此代码在不同的线程上运行,并由计时器驱动(每5秒触发一次)。这很简单。下面是它的样子:

void FileManager::ReadFile()
{
    std::vector<std::string> vecLines;
    std::string line;

    m_InputStream.clear();

    while (std::getline(m_InputStream, line))
    {
        vecLines.push_back(line);
    }

    if (! vecLines.empty())
    {
        OnFileUpdate(vecLines);
    }
}
void文件管理器::ReadFile()
{
矢量线;
std::字符串行;
m_InputStream.clear();
while(std::getline(m_InputStream,line))
{
矢量线。向后推(线);
}
如果(!vecLines.empty())
{
OnFileUpdate(矢量线);
}
}

我的问题是,这个代码安全吗?基本上,我执行的算法是提前打开输入流并搜索到文件末尾。然后当调用这个方法时,如果有任何新行要读取,那么它们将在这里被读取。如果有任何新行,则会通知此类的所有感兴趣的客户端(通过OnFileUpdate()调用)。

这需要在后台挂起一个线程

我要做的是创建一个类来处理所有的错误/事件日志记录,如下所示。你可以让一切都是静态的,这样你就可以从多个位置访问它 赞成的意见: 没有其他文件I/O 没有次线程 欺骗: 不带锁的多核保险柜

class EventLogger {
  public:
    EventLogger();
    ~EventLogger();
    void LogEvent(const std::string &event) {
      //Handle output to file here
      OnFileUpdate(event);
    }
  private: 
    void OnFileUpdate(const std::string &event) {
      //DoWorkHere
    }
}

听起来像是tail-f。也许可以查看源代码进行比较。你不喜欢消息传递吗?(线程X:--嘿,主线程,我写了一些东西,你打算怎么办?主线程:--好的,我会把它发送到函数,保持良好的工作状态,直到你死。)嗯,日志文件的写入端超出了我的控制范围。我正在一个应用程序中创建一个新线程,该线程将监视日志文件是否满足某些条件(我会查看更新的行以了解情况)。相关: