C ++プログラムのログファイルを作成しようとしています。私の目標は、プログラムの2つのポイントに2つのタイムスタンプを配置し、これら2つのポイント間のCPU時間をファイルに出力することです。これを行っているのは、コードのどの部分に最も時間がかかり、改善できるかを知りたいからです(したがって、測定したいコードのチャンクがいくつかある可能性があります)。これまで、呼び出されたときに、引数として渡した文字列をファイルに出力する関数を作成しました。
#define LOGFILE "myprog.log"
void Log (std::string message){
std::ofstream ofs;
ofs.open(LOGFILE, std::ofstream::out | std::ios::app);
ofs << message << std::endl;
ofs.close();
}
ただし、CPUタイムスタンプを印刷する方法を理解するのに苦労しています。まず、使用する時間測定形式がわかりません(chronoタイプとtime_tタイプのどちらを使用する必要がありますか?)期間を出力しようとしているので、期間のタイプがあると便利です(I ' chrono :: durationを試しましたが、C ++ 11のサポートが必要なようです)。次に、使用するタイプがわかっている場合、それをファイルに出力するにはどうすればよいですか?その型を文字列にキャストする方法はありますか?または、関数に直接渡して、なんらかの方法で印刷できますか?
これはここ数日私を大いに悩ませました、そして私はそれを理解することができないようです、それでどんな入力も本当に役に立ちます。前もって感謝します!
std::chrono::system_clock
このタイムスタンプを取得するために使用することをお勧めします。高精度のタイミング測定を行うためのstd::chrono::steady_clock
またはを使用しないでくださいstd::chrono::high_resolution_clock
。また、実時間に対する忠実度または精度を保証するものではありません。
auto now = std::chrono::system_clock::now();
//now is a time_point object describing the instant it was recorded according to your system clock
C ++ 20では、これは非常に簡単です。
std::string formatted_time = std::chrono::format("%F_%T", now);
ofs << formatted_time << ": " << message << std::endl;
%F
はの代わりに%Y-%m-%D
なります。これは、ISO形式で年月日を出力します2018-10-09
。%T
は、%H:%M:%S
時間を出力します。つまり、17:55:34.786
std::chrono::format
その他のオプション/詳細については、仕様を参照してください。
ハワード・ヒナントのdate
ライブラリについて考えてみましょう。そのほとんどは、chrono
ライブラリの新しい部分としてC ++ 20に組み込まれています。format
この関数はC ++ 20バージョンについて先に示唆したのと同じ構文を使用しているライブラリで見つかりました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加