1

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

4

1 に答える 1

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
    }
}
于 2013-01-24T23:55:54.570 に答える