2016-04-25 10 views
0

以来、私はその記事をたくさん見てきた、プロセッサの電源投入からマイクロ秒単位の時間を取得するためにがSTDからマイクロ秒の時間を取得する::クロノ:: steady_clock ::今()プロセッサのパワーアップ

をしようとしていますエポックからの時間を与えるが、私はパワーアップ以来の時間が必要である

また、time_pointとしてではなく、時間を取得しようとしている。

time_pointからlong intに変換する最善の方法は何ですか。

最後には、私は稼働時間を取得するためのメカニズムを認識していないよ

おかげで、 -D

答えて

1

、差はブースト:: steady_clockとstd :: steady_clockの間にあるかわからないですLinuxでマイクロ秒の解像度に、しかしsysinfoは、第2の解像度で取得するためのシンプルなメカニズムを提供しています:

#include <sys/sysinfo.h> 

struct sysinfo info; 
if(sysinfo(&info) != 0) 
{ 
    // handle the failure 
} 

// uptime in seconds is available (as a long) in info.uptime 

私はlongからtime_pointからの変換を仮定しているが、RELではありません現時点では、しかし、時点は、基準点から経過した時間の長さではなく、特定の時点を表す。開始点から何時間単位に変換するには、開始点を減算して継続時間に変換し、duration_castを使用してキャストして、選択した単位に変換する必要があります。例えば:

using namespace std::chrono; // for brevity in the example code.  

auto elapsed = duration_cast<milliseconds>(timepoint1 - reftimepoint).count() 

boost::steady_clockは、C++標準ライブラリのstd::steady_clockの包含前から既存の実装です。古いコードベースを扱っているか、C++ 11のサポートなしでコンパイラやプラットフォームへの移植性が必要な場合を除いて、今はboost::steady_clockを使う必要はあまりありません。

0

以下のC関数を検証しました。これはC++でも使用できます。

#include <stdio.h> 
#include <time.h> 

int main(int argc, char* argv[]) { 
    struct timespec t; 
    clock_gettime(CLOCK_MONOTONIC, &t); 
    printf("tv_sec=%llu tv_nsec=%llu\n", 
    (unsigned long long)t.tv_sec, 
    (unsigned long long)t.tv_nsec); 
    return 0; 
} 

上記のコードをシステムの稼働時間と比較すると、ほとんど同じです。

[email protected]:~/Desktop/WinShare$ cat /proc/uptime && ./time 
52.46 2.88 
tv_sec=52 tv_nsec=468791899 

[email protected]:~/Desktop/WinShare$ cat /proc/uptime && ./time 
61.08 2.88 
tv_sec=61 tv_nsec=81561476 

[email protected]:~/Desktop/WinShare$ cat /proc/uptime && ./time 
63.97 2.88 
tv_sec=63 tv_nsec=979358440 

[email protected]:~/Desktop/WinShare$ cat /proc/uptime && ./time 
65.05 2.88 
tv_sec=65 tv_nsec=52160586 

[email protected]:~/Desktop/WinShare$ cat /proc/uptime && ./time 
75.44 12.47 
tv_sec=75 tv_nsec=448578284 
関連する問題