Obliczanie czasu działania kodu

Czasami przydaje się nam policzyć jak szybko wykonuje się dany kod lub po prostu zliczyć czas do innego użytku, znam trzy sposoby na to, różnią się one dokładnością przy podawaniu różnicy czasów:

I - dokładność do 1 sekundy

Unit1.cpp

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TDateTime czas, czasStart, czasEnd;

   czasStart = Now();
   for (long int i = 0; i <= 100000000; i++);
   czasEnd = Now();

   czas = czasEnd - czasStart;
   Label1->Caption = czas;
}


II - sposób dokładność do 0,001 sekundy:

Unit1.cpp

void __fastcall TForm1::Button3Click(TObject *Sender)
{
   float Start = GetTickCount();
   for (long int i = 0; i <= 100000000; i++);
   float End = GetTickCount();

   Label1->Caption = FloatToStr((End - Start) / 1000) + " s.";
}


III sposób - dokładność do 0,0000000000001 s

Unit1.cpp

void __fastcall TForm1::Button2Click(TObject *Sender)
{
   LARGE_INTEGER lpFrequency;
   LARGE_INTEGER lpPerformanceCountStart, lpPerformanceCountEnd;

   if (QueryPerformanceFrequency(&lpFrequency) != 0)
   {
      QueryPerformanceCounter(&lpPerformanceCountStart);
      for (long int i = 0; i <= 100000000; i++);
      QueryPerformanceCounter(&lpPerformanceCountEnd);

      double Frequency = lpFrequency.QuadPart;
      double End = lpPerformanceCountEnd.QuadPart;
      double Start = lpPerformanceCountStart.QuadPart;

      Label1->Caption = FloatToStr((End - Start) / Frequency) + " s.";
   }
}