サーバーに接続し、他の機能に加えて、サーバーチャットをファイルに記録するクライアントアプリケーションを作成しているので、ルール違反は後で罰せられる可能性があります。
残念ながら、アプリケーションには(少なくとも)2つのスレッド(受信者ループと送信者ループ)が必要になりました。サーバーにはタイミング歳差運動が必要です。つまり、データをファイルに記録するためのスレッドセーフなソリューションが必要です。
これは、スレッドが(可能な限り)同時にログ情報を送信する場合に発生する可能性があります。
logfile.txt:
chat: Hello my name is Duke
chat: Hell[WARNING]: Hacker detectedo my name is John
ある文が別の文に注入されているのを見ることができます。私はこれが決して起こらないようにしたい。同じことが私のstd::cout
出力にも起こりますが、それはそれほど重要ではありません。
質問:
std::ofstream
一度に1つのデータのみをログに記録するにはどうすればよいですか?(他のことを覚えて、途中ではなく、後で挿入します)- ファイルが他のスレッドによって閉じられたかどうかを確認するにはどうすればよいですか。(またはエラー)
ボーナス質問:同じ問題を解決できますstd::cout
か?