2

このプログラムは、データベースとアプリケーションの間のミドルウェアです。データベースアクセスごとに、ほとんどの場合、時間の長さをミリ秒単位で計算します。以下の例は、BuilderライブラリのTDateTimeを使用しています。可能な限り、標準のc++ライブラリのみを使用する必要があります。

AnsiString TimeInMilliseconds(TDateTime t) {
      Word Hour, Min, Sec, MSec;
      DecodeTime(t, Hour, Min, Sec, MSec);
      long ms = MSec + Sec * 1000 + Min * 1000 * 60 + Hour * 1000 * 60 * 60;
      return IntToStr(ms);
  }
  // computing times
   TDateTime SelectStart = Now();
   sql_manipulation_statement();
   TDateTime SelectEnd = Now();
4

2 に答える 2

8

WindowsとPOSIX準拠のシステム(Linux、OSXなど)の両方で、でclock()見つかったを使用して、呼び出しの時間を1 / CLOCKS_PER_SEC(タイマーティック)で計算できます<ctime>。その呼び出しからの戻り値は、プログラムがミリ秒単位で実行を開始してからの経過時間になります。次に、への2つの呼び出しをclock()互いに減算して、特定のコードブロックの実行時間を計算できます。

したがって、たとえば:

#include <ctime>
#include <cstdio>

clock_t time_a = clock();

//...run block of code

clock_t time_b = clock();

if (time_a == ((clock_t)-1) || time_b == ((clock_t)-1))
{
    perror("Unable to calculate elapsed time");
}
else
{
    unsigned int total_time_ticks = (unsigned int)(time_b - time_a);
}

clock()編集:Windowsでは実時間を測定するのに対し、POSIXシステムではCPU経過時間を測定するため、POSIX準拠のプラットフォームとWindowsプラットフォームのタイミングを直接比較することはできません。ただし、これは標準C ++ライブラリの関数であり、同じプラットフォーム上の異なるコードブロック間でパフォーマンスを比較するには、ニーズに合うはずです。

于 2011-05-25T14:05:10.170 に答える
4

Windowsでは、GetTickCount (MSDN)を使用できます。これにより、システムが起動してから経過したミリ秒数がわかります。呼び出しの前後にこれを使用すると、呼び出しにかかったミリ秒数がわかります。

DWORD start = GetTickCount();
//Do your stuff
DWORD end = GetTickCount();
cout << "the call took " << (end - start) << " ms";

編集:ジェイソンが述べたように、Clock(); それはWindowsだけに関連していないのでより良いでしょう。

于 2011-05-25T14:05:21.603 に答える