2

私は SFML 1.6 を使用してゲームを作成していますが、エラーが発生する場合があり、ユーザーがゲームを実行したときにコンソールを表示したくないので、stderr(SFML が明らかにエラーをログに記録するために使用する) にリダイレクトしました。現在の日付にちなんで名付けられたファイル。したがって、エラーが発生した場合、ユーザーはログを確認するだけです。ここで、各ログの前に時刻も追加したいので、ログ ファイルは次のようになります。

12:34:17 CDT
failed to load image "sprite.png"

12:35:01 CDT
failed to load file "font.ttf"

上記の結果を得るために、現在の時間を任意の出力に「追加」する方法はありますか?

編集

言うのを忘れていましたが、SFML ライブラリはほとんどのエラーをログに記録するものです。いわば、SFML ライブラリがアプリケーションを離れるときの時間を追跡したいと思います。料金所のようなものですが、出発するものには時間が追加されます。私は時間を文字列として取得する方法を知っていますが、printf やその他の関数を呼び出すのは私ではありません。

4

2 に答える 2

2

単純なリダイレクトよりも優れた方法を実行できます。実際には、着信文字ストリームとファイルへの書き込みの間に独自のコードを挿入できます。

基本的な考え方は、 からクラスを派生させてfilebuf、配置される文字を制御することです。

次の 2 つの戦略があります。

  • \n簡単な方法は、文字を読み取るたびにフラグを設定し、putその後最初にタイムスタンプを挿入する (そしてフラグを設定解除する) ことです。
  • 難しい方法は、\n文字が一致するまで出力をバッファリングすることです。その時点で、タイムスタンプをフォーマットしてからバッファをフラッシュします (まで\n)

各行の書式設定の開始と終了の間にあまり時間がないことを考えると、簡単な方法で十分確実に機能するはずです。

xsputn仕事を終わらせるにはオーバーライドで十分だと思います。

于 2012-05-31T08:18:13.300 に答える
0

実際の印刷を行う関数を変更できる場合は、はい(関数、、、およびを検索することをお勧めtimeしますctime)。関数を変更できない場合は、いいえ。localtimestrftime

于 2012-05-31T05:26:25.203 に答える