我编写了以下方法,它基本上从另一个线程连续写入的日志文件中读取最新的行。此代码在不同的线程上运行,由计时器驱动(每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);
}
}
我的问题是,这段代码安全吗?基本上,我执行的算法是提前打开输入流并寻找文件的末尾。然后当调用此方法时,如果有任何新行要读取,那么它们将在此处读取。如果有任何新行,则会通知此类的任何感兴趣的客户端(通过OnFileUpdate()调用)。
答案 0 :(得分:0)
这需要在后台挂起一个线程。
我要做的是创建一个处理所有错误/事件记录的类,看起来如下所示。您可以将所有内容设置为静态,然后通过这种方式可以从多个位置访问它 优点: 没有额外的文件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
}
}