ホームページ > バックエンド開発 > C++ > `time()` が短いタスクの前後で同じ値を返す場合があるのはなぜですか?

`time()` が短いタスクの前後で同じ値を返す場合があるのはなぜですか?

Susan Sarandon
リリース: 2025-01-03 15:07:40
オリジナル
302 人が閲覧しました

Why Does `time()` Sometimes Return the Same Value Before and After a Short Task?

経過時間を簡単に測定する

質問:

を使用してプログラムの経過時間を測定する場合time()、前後の値が残るのはなぜですか同じですか?

説明:

time() は、エポックからの現在時刻を秒単位で返します。測定する時間が短い場合、前後の値の差が小さすぎて検出できない可能性があります。

解決策:

短い時間を正確に測定するにはタイムスパンについては、代替方法の使用を検討してください:

C Structured Time測定:

struct timeval startTV, endTV;
gettimeofday(&startTV, NULL); 
// Execute time-consuming tasks
gettimeofday(&endTV, NULL); 

timersub(&endTV, &startTV, &diff);
printf("**time taken = %ld %ld\n", diff.tv_sec, diff.tv_usec);
ログイン後にコピー
  • timeval 構造体は、マイクロ秒までの精度で時刻値を表します。
  • gettimeofday() は、現在の時刻を取得します。
  • timersub() は 2 つの timeval 構造間の差を計算します。
  • 結果は秒単位で報告されます。 (diff.tv_sec) およびマイクロ秒 (diff.tv_usec)。

C 11 スタイルの精度時間測定:

#include <chrono>

std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
// Execute time-consuming tasks
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();

std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count() << "[µs]" << std::endl;
std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count() << "[ns]" << std::endl;
ログイン後にコピー
  • std::高精度の時間を提供するクロノライブラリ
  • std::chrono::steady_ Clock は、未知の任意の時点からの時間を測定します。
  • 時間差は std::chrono::duration オブジェクトとして計算されます。マイクロ秒またはナノ秒に変換されます。

以上が`time()` が短いタスクの前後で同じ値を返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート