【C++/C#】タイマーの実装 Timer

1. はじめに

        タイマーは C++ および C# のいくつかのクラス ライブラリを通じて実装されており、プログラムで許容される時間をカウントするために使用されますが、実際の使用ではミリ秒タイマーで十分です。

2.ミリ秒タイマー

#include<ctime>
class Timer_milisecode{//
public:
    Timer_milisecode(){
        tbegin=clock();
        tend=clock();
    }

    void begin(){
        tbegin=clock();
    }
    void end(){
        tend=clock();
    }

    double spent(){
        return double(tend-tbegin)/CLOCKS_PER_SEC*1000;
    }

    double getCurrentTime(){
        return double(clock());
    }
private:    
    // const int clock_per_second=CLOCKS_PER_SEC; 
    clock_t tbegin,tend;
};

ヘッダファイルは#include<ctime>、詳細説明

        ctime の下には、 Clock_t 型 (long) があり、対応する関数 Clock() があり、その戻り値は Clock_t 型であり、1 秒あたりのティック数を表す定数 CLOCKS_PER_SEC があります。ミリ秒ごとにヒットします。時間間隔を計算するときは、2 つの Clock_t 数値を減算し、それらを修正してミリ秒数を取得します。

3. マイクロ秒タイマー

#include<Windows.h>
class Timer_microseconds{
public:
    Timer_microseconds(){
        QueryPerformanceFrequency(&tc);
    }
    void begin(){
        QueryPerformanceCounter(&t1);
    }
    void end(){
        QueryPerformanceCounter(&t2);
    }
    double spent(){
        return  (double(t2.QuadPart-t1.QuadPart)*1000000.0)/tc.QuadPart;
    }

private:
    LARGE_INTEGER t1,t2,tc;

};

ヘッダー ファイルは #include<windows.h> です。

        上記と同様です。1 つ目は、3 つの LARGE_INTEGER 変数を定義することです。1 秒あたりの不良周波数をクエリする QueryPerformanceFrequency() とカウンターである QueryPerformanceCounter() の 2 つの関数があります。ここで、理論的には、tc.QuadPart の値は 1 秒あたり 10_000_000 です。つまり、マイクロ秒ごとに 10 がカウントされます。これはより正確です。

4. マイクロ秒カウンター

#include<chrono>
class Timer_chrono{
public:
    Timer_chrono(){

    }

    void begin(){
        start=std::chrono::high_resolution_clock::now();
    }
    void end(){
        spentTime=std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now()-start).count();
    }
    double spent(){
        return (double)spentTime;
    }

private:
    std::chrono::time_point<std::chrono::high_resolution_clock> start;
    long long spentTime;
};

上記のようなヘッダー ファイル <chrono> を使用する必要があります。

5.C#タイマー

    class Timer
    {
        private DateTime dt;
        private TimeSpan tSpen;
        public Timer()
        {
            dt= DateTime.Now;
        }

        public void begin()
        {
            dt= DateTime.Now;
        }
        public void end()
        {
            tSpen=DateTime.Now-dt;
        }
        public double spent()
        {
            return tSpen.TotalMilliseconds;
        }
    }

実際、C# にはタイマーは必要なく、DateTime クラスと TimeSpan クラスだけが必要です。最高精度はミリ秒です。

6. C++ で現在時刻を取得する

    time_t tm0;
    time(&tm0);
    std::cout<<tm0<<endl;
    cout<<ctime(&tm0)<<endl;

出力は、2023 年 3 月 20 日月曜日 23:29:15 となります。ctime は秒を文字列にフォーマットします。

    tm ttm= *localtime(&tm0);
    cout<<ttm.tm_year<<"\t"<<ttm.tm_mon<<"\t"<<ttm.tm_mday<<endl;

struct tm、1900 年以降の年と時刻を出力します。

おすすめ

転載: blog.csdn.net/weixin_43163656/article/details/129678302