別のスレッドによって継続的に書き込まれているログ ファイルから基本的に最新の行を読み取る次のメソッドを作成しました。このコードは別のスレッドで実行され、タイマー (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() 呼び出しを介して) 通知されます。